§
    Ý˜ºhYÁ  ã                   óÔ   — d dl mZmZ d dlmZ d dl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dS )é    )ÚABCÚabstractmethod)ÚUserDict)ÚOptionalÚ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                   ó"  — 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d
S )Ú
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         úk/var/www/html/services/rag-service/venv/lib/python3.11/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ÚFloatTensorÚtupleÚTensorr   ÚFINALIZE_INPUTS_DOCSTRINGÚintr   © r   r   r   r   [   s-  € € € € € ðð ð
 ØÐÐ2Ñ3Ô3ðAàÔ#ðAð Ô&ðAð Ô%ð	Að
 Ô&ðAð 
ˆuŒ|Ô	ðAð Að Añ 4Ô3ñ „^ðAð ØÐÐ3Ñ4Ô4ð	AàÔ#ð	Að Ô&ð	Að Ô%ð		Að
 Ô&ð	Að ð	Að 
Ô	ð	Að 	Að 	Añ 5Ô4ñ „^ð	Að 	Að 	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dS )#Ú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://huggingface.co/papers/1610.02424) for more details.
        max_length (`int`, *optional*):
            The maximum length of the sequence to be generated.
    ç      ð?Fr
   NÚ
batch_sizeÚ	num_beamsÚdeviceÚlength_penaltyÚdo_early_stoppingÚnum_beam_hyps_to_keepÚnum_beam_groupsr   c	                 óJ  ‡ ‡— |‰ _         |‰ _        |‰ _        |‰ _        |‰ _        |‰ _        ‰ j         ‰ j        z  ‰ _        d‰ _        ˆˆ fd„t          |‰ j        z  ¦  «        D ¦   «         ‰ _	        t          j        d„ t          |‰ j        z  ¦  «        D ¦   «         t          j        ‰ j        ¬¦  «        ‰ _        t          |t          ¦  «        r|dk    rt!          d|› d�¦  «        ‚t          |t          ¦  «        r||k    s	||z  dk    rt!          d	|› d
|› d�¦  «        ‚d S )NFc                 óT   •— g | ]$}t          ‰j        ‰j        ‰j        ‰¬ ¦  «        ‘Œ%S ©)r1   r3   Úearly_stoppingr   )ÚBeamHypothesesÚ
group_sizer3   r4   ©Ú.0Ú_r   r   s     €€r   ú
<listcomp>z-BeamSearchScorer.__init__.<locals>.<listcomp>¸   sN   ø€ ð 
ð 
ð 
ð õ Øœ/Ø#Ô2Ø#Ô5Ø%ð	ñ ô ð
ð 
ð 
r   c                 ó   — g | ]}d ‘ŒS ©Fr,   ©r>   r?   s     r   r@   z-BeamSearchScorer.__init__.<locals>.<listcomp>Ä   s   € ÐEÐEÐE�qˆUÐEÐEÐEr   ©Údtyper2   r
   úA`num_beams` has to be an integer strictly greater than 1, but is úG. For `num_beams` == 1, one should make use of `greedy_search` instead.r   úŠ`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 ú with `num_beams` being ú.)r1   r2   r3   r4   r5   r6   r<   Ú_is_initÚrangeÚ
_beam_hypsr%   ÚtensorÚboolÚ_doneÚ
isinstancer+   Ú
ValueError)	r   r0   r1   r2   r3   r4   r5   r6   r   s	   `       `r   Ú__init__zBeamSearchScorer.__init__¢   s‘  øø€ ð #ˆŒØˆŒØ,ˆÔØ!2ˆÔØ%:ˆÔ"Ø.ˆÔØœ.¨DÔ,@Ñ@ˆŒàˆŒð
ð 
ð 
ð 
ð 
õ ˜:¨Ô(<Ñ<Ñ=Ô=ð
ñ 
ô 
ˆŒõ ”\ØEÐE�E *¨tÔ/CÑ"CÑDÔDÐEÑEÔEÍUÌZÐ`dÔ`kð
ñ 
ô 
ˆŒ
õ ˜)¥SÑ)Ô)ð 	¨Y¸!ª^¨^ÝðCÐT]ð Cð Cð Cñô ð õ
 ˜/­3Ñ/Ô/ð 	°OÀiÒ4OÐ4OÐU^ÐapÑUpÐtuÒUuÐUuÝðqØ;Jðqð qØdmðqð qð qñô ð ð VvÐUur   r   c                 ó4   — | j                              ¦   «         S ©N©rP   Úall©r   s    r   Úis_donezBeamSearchScorer.is_doneÓ   ó   € àŒz�~Š~ÑÔÐr   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    rW| j        dk    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	        |¬	¦  «        }|�Ft          |t          j        ¦  «        s,t          |t          ¦  «        r|g}t          j        |¦  «        }t          |¦  «        D �]}|| j        z  |z   }| j        |         rj| 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   }|�‰|                     ¦   «         |v rs|| j        k    }|rŒ<|�||         }||fz   }nd }| j        |                              ||                              ¦   «         |                     ¦   «         ||
|	z
  ¬¦  «         n||||f<   ||||f<   ||||f<   |dz  }|| j        k    r nŒÉ|| j        k     r-t          d| j        › d||         › d|› d||         › d�	¦  «        ‚| j        |         pK| j        |                              ||                              ¦   «                              ¦   «         |
|	¦  «        | j        |<   �Œt1          |                     d¦  «        |                     d¦  «        |                     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 rD   ú#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©r]   Ú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ÚlenrM   r6   r<   rR   r2   r%   ÚzerosrE   rQ   r)   r+   rN   rL   rP   r1   Ú	enumerateÚzipÚitemÚaddÚclonerY   Úmaxr   Úview)r   r   r   r   r   r[   r\   r]   r^   r_   Úcur_lenr0   r2   rr   rs   rt   Ú	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Ò'Ð'Ý ðQ¨I¬O¸AÔ,>ð Qð QØ#œðQð Qð Qñô ð õ
 !ðI i¤o°aÔ&8ð Ið IØ”ðIð Ið Iñô ð ð
 Ô!ˆÝ œ;¨
°D´OÐ'DÈKÔL]ÐflÐmÑmÔmÐÝ œ;¨
°D´OÐ'DÈKÔL]ÐflÐmÑmÔmÐÝ!œK¨°T´_Ð(EÈ\ÔM_ÐhnÐoÑoÔoÐàÐ#­J°|ÅUÄ\Ñ,RÔ,RÐ#Ý˜,­Ñ,Ô,ð .Ø ,˜~�Ý œ<¨Ñ5Ô5ˆLå˜zÑ*Ô*ð 9	ñ 9	ˆIØ'¨$Ô*>Ñ>ÀÑLˆOØŒz˜/Ô*ð 	Ø”>¥C¨¬¸Ô(HÑ$IÔ$IÒIÐIÝ$Ð%uÈ4Ì>Ð%uÐ%uÐ%uÑvÔvÐvØÐ'¨<Ð+?Ý$Ð%tÑuÔuÐuà12Ð  ¨A¨A¨A Ñ.Ø1=Ð  ¨A¨A¨A Ñ.Ø23Ð! )¨Q¨Q¨Q ,Ñ/Øð ˆHÝIRÝ�K 	Ô*¨K¸	Ô,BÀLÐQZÔD[Ñ\Ô\ñJô Jð ð ÑE�Ñ!E *¨j¸*ð "+¨T¬_Ñ!<¸zÑ!I�à Ð,°:·?²?Ñ3DÔ3DÈÐ3TÐ3Tà=LÐPTÔP_Ò=_Ð:Ø=ð !Ø Ø#Ð/Ø%1°.Ô%A˜
Ø%/°>Ð2CÑ%C˜
˜
à%)˜
à”O OÔ4×8Ò8Ø! .Ô1×7Ò7Ñ9Ô9Ø"ŸšÑ)Ô)Ø%/Ø&-Ð0BÑ&Bð	 9ñ ô ð ð ð =GÐ$ Y°Ð%8Ñ9Ø<FÐ$ Y°Ð%8Ñ9Ø=KÐ% i°Ð&9Ñ:Ø ‘M�Hð ˜tœÒ.Ð.Ø�Eð /ð ˜$œ/Ò)Ð)Ý ð[˜tœð [ð [¸;ÀyÔ;Qð [ð [Ø$ð[ð [Ø3>¸yÔ3Ið[ð [ð [ñô ð ð +/¬*°_Ô*Eð +ÈÌÐYhÔIi×IqÒIqØ˜IÔ&×*Ò*Ñ,Ô,×1Ò1Ñ3Ô3°WÐ>PñJô JˆDŒJ�Ñ'Ñ'õ à$4×$9Ò$9¸"Ñ$=Ô$=Ø$4×$9Ò$9¸"Ñ$=Ô$=Ø%6×%;Ò%;¸BÑ%?Ô%?ðð ñ
ô 
ð 	
r   Úfinal_beam_scoresÚfinal_beam_tokensÚfinal_beam_indicesc
                 óì  — t          | j        ¦  «        | j        z  }
|�Ft          |t          j        ¦  «        s,t          |t          ¦  «        r|g}t	          j        |¦  «        }t          | j        ¦  «        D ]Ž\  }}| j	        |         rŒt          | j        ¦  «        D ]f}|| j        z  |z   }||                              ¦   «         }||         }|�||         nd }|j        d         |	z
  }|                     ||||¬¦  «         ŒgŒ�|                     |
| j        z  ¦  «        }g }g }t	          j        |
| j        z  | j        t          j        ¬¦  «        }t          |
¦  «        D ]Ü}| j        || j        z  |dz   | j        z  …         }d„ |D ¦   «         }t)          |d„ ¬¦  «        }t          | j        ¦  «        D ]…}|                     ¦   «         }|d         }|d         }|d	         }t          |¦  «        || j        |z  |z   <   |                     |¦  «         |                     |¦  «         |||| j        z  |z   <   Œ†ŒÝ|                     ¦   «                              ¦   «         dz   } |�t1          | |¦  «        n| }!|                     |
| j        z  |!¦  «        }"t          |¦  «        dk    r'|d         �|                     |
| j        z  |!¦  «        }#nd }#|                     ¦   «                              ¦   «         |                     ¦   «                              ¦   «         k    r&|€t3          d
¦  «        ‚|"                     |¦  «         |#�|#                     d¦  «         t          t7          ||¦  «        ¦  «        D ]`\  }\  }$}%|$|"|d ||         …f<   |#�(t	          j        |%¦  «        |#|d t          |%¦  «        …f<   ||         |!k     r|d         |"|||         f<   Œat9          |"||#dœ¦  «        S )Nra   rj   ©r2   rE   r
   c                 ó&   — g | ]}|j         D ]}|‘ŒŒS r,   )Úbeams)r>   Úbeam_hypÚbeams      r   r@   z-BeamSearchScorer.finalize.<locals>.<listcomp>k  s)   € ÐbÐbÐb¨ÐS[ÔSaÐbÐbÈ4˜tÐbÐbÐbÐbr   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_scoresr]   )rv   rM   r6   rQ   r%   r)   r+   rN   rx   rP   rL   r<   rz   ru   r{   Únewr5   rw   r2   Úfloat32ÚsortedÚpopÚappendr}   ÚminrR   Úfill_ry   r   )&r   r   rŠ   r‹   rŒ   r   r[   r\   r]   r_   r0   r�   r‘   Úindex_per_groupr‡   Úfinal_scoreÚfinal_tokensr‰   rk   Úsent_lengthsÚbestÚbest_indicesÚbest_scoresÚiÚbeam_hyps_in_batchÚ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ˆ
àÐ#­J°|ÅUÄ\Ñ,RÔ,RÐ#Ý˜,­Ñ,Ô,ð .Ø ,˜~�Ý œ<¨Ñ5Ô5ˆLõ *3°4´?Ñ)CÔ)Cð 	nð 	nÑ%ˆO˜XØŒz˜/Ô*ð Øõ $)¨¬Ñ#9Ô#9ð nð n�Ø!0°4´?Ñ!BÀ_Ñ!T�Ø/°Ô?×DÒDÑFÔF�Ø(¨Ô8�Ø=IÐ=U˜\¨.Ô9Ð9Ð[_�
Ø ,Ô 2°2Ô 6Ð9KÑ K�Ø—’˜\¨;ÀZÐ_l�ÑmÔmÐmÐmðnð !—}’} Z°$Ô2LÑ%LÑMÔMˆØˆØˆÝ”k *¨tÔ/IÑ"IÐRVÔR]ÕejÔerÐsÑsÔsˆõ �zÑ"Ô"ð 	Mð 	MˆAØ!%¤°°TÔ5IÑ1IÈQÐQRÉUÐVZÔVjÑLjÐ1jÔ!kÐØbÐbÐ4FÐbÑbÔbˆOÝ  °n°nÐEÑEÔEˆKÝ˜4Ô5Ñ6Ô6ð Mð M�Ø!,§¢Ñ!2Ô!2�Ø+¨AÔ.�
Ø)¨!Ô,�Ø+¨AÔ.�
ÝCFÀxÁ=Ä=�˜TÔ7¸!Ñ;¸aÑ?Ñ@ð —’˜HÑ%Ô%Ð%ð ×#Ò# JÑ/Ô/Ð/àBL�˜A Ô :Ñ:¸QÑ>Ñ?Ð?ðMð  (×+Ò+Ñ-Ô-×2Ò2Ñ4Ô4°qÑ8ÐØ<FÐ<R•sÐ+¨ZÑ8Ô8Ð8ÐXhˆØ$-§M¢M°*¸tÔ?YÑ2YÐ[gÑ$hÔ$hˆåˆ|ÑÔ˜qÒ Ð  \°!¤_Ð%@Ø(1¯ª°jÀ4ÔC]Ñ6]Ð_kÑ(lÔ(lˆGˆGàˆGð ×ÒÑÔ×"Ò"Ñ$Ô$¨×(8Ò(8Ñ(:Ô(:×(?Ò(?Ñ(AÔ(AÒAÐAØÐ#Ý Ð!CÑDÔDÐDØ�MŠM˜,Ñ'Ô'Ð'àÐØ�MŠM˜"ÑÔÐõ $-­S°°|Ñ-DÔ-DÑ#EÔ#Eð 	>ð 	>ÑˆAÑ��hØ,0ˆG�AÐ(˜ aœÐ(Ð(Ñ)àÐ"Ý.3¬l¸8Ñ.DÔ.D�˜˜?�S ™]œ]˜?Ð*Ñ+à˜AŒ Ò-Ð-à.:¸1¬o�˜˜<¨œ?Ð*Ñ+øåà$Ø#.Ø 'ðð ñ
ô 
ð 	
r   ©r/   Fr
   r
   N)NNNr   r   ©NNNr   )r    r!   r"   r#   r+   r%   r2   r   Úfloatr   rO   ÚstrrS   ÚpropertyrY   r&   r'   r)   ÚlistÚdictr   r(   r   r,   r   r   r.   r.   {   s¯  € € € € € ð$ð $ðV +.Ø8=Ø/0Ø)*Ø$(ð/ð /àð/ð ð/ð ”ð	/ð
 ! œð/ð $ E¨$°¨)Ô$4Ô5ð/ð  (¨œ}ð/ð " #œð/ð ˜S”Mð/ð /ð /ð /ðb ð ˜ð  ð  ð  ñ „Xð ð <@ØFJØ37Ø%&Ø,-ðg
ð 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
ð g
ð g
ð g
ð` <@ØFJØ37Ø,-ð`
ð `
àÔ#ð`
ð !Ô,ð`
ð !Ô+ð	`
ð
 "Ô,ð`
ð ð`
ð ˜u S¨%¬,Ð%6Ô7Ô8ð`
ð ˜u S¨$¨s¬)°U´\Ð%AÔBÔCð`
ð ˜uÔ/Ô0ð`
ð % SœMð`
ð 
ˆuÔÔ	 ð`
ð `
ð `
ð `
ð `
ð `
r   r.   c                   ó   — 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dS )-Ú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://huggingface.co/papers/1610.02424) for more details.
        max_length (`int`, *optional*):
            The maximum length of the sequence to be generated.
    r/   Fr
   Nr0   r1   Úconstraintsr2   r3   r4   r5   r6   r   c
                 ó8  ‡ ‡	— |‰ _         |‰ _        |‰ _        |‰ _        |‰ _        |‰ _        ‰ j         ‰ j        z  ‰ _        |‰ _        d‰ _        ˆ	ˆ fd„t          |¦  «        D ¦   «         ‰ _
        t          j        d„ t          |¦  «        D ¦   «         t          j        ‰ j        ¬¦  «        ‰ _        t          |t           ¦  «        r|dk    rt#          d|› d�¦  «        ‚t          |t           ¦  «        r||k    s	||z  dk    rt#          d	|› d
|› d�¦  «        ‚d S )NFc                 óT   •— g | ]$}t          ‰j        ‰j        ‰j        ‰¬ ¦  «        ‘Œ%S r9   )r;   r1   r3   r4   r=   s     €€r   r@   z8ConstrainedBeamSearchScorer.__init__.<locals>.<listcomp>Þ  sN   ø€ ð 
ð 
ð 
ð õ Øœ.Ø#Ô2Ø#Ô5Ø%ð	ñ ô ð
ð 
ð 
r   c                 ó   — g | ]}d ‘ŒS rB   r,   rC   s     r   r@   z8ConstrainedBeamSearchScorer.__init__.<locals>.<listcomp>ç  s   € Ð"DÐ"DÐ"D¨Q 5Ð"DÐ"DÐ"Dr   rD   r
   rF   rG   r   rH   rI   rJ   )r1   r2   r3   r4   r5   r6   r<   rÄ   rK   rL   rM   r%   rN   rO   rP   rQ   r+   rR   )
r   r0   r1   rÄ   r2   r3   r4   r5   r6   r   s
   `        `r   rS   z$ConstrainedBeamSearchScorer.__init__È  s�  øø€ ð #ˆŒØˆŒØ,ˆÔØ!2ˆÔØ%:ˆÔ"Ø.ˆÔØœ.¨DÔ,@Ñ@ˆŒØ&ˆÔàˆŒð
ð 
ð 
ð 
ð 
õ ˜:Ñ&Ô&ð
ñ 
ô 
ˆŒõ ”\Ð"DÐ"Dµ%¸
Ñ2CÔ2CÐ"DÑ"DÔ"DÍEÌJÐ_cÔ_jÐkÑkÔkˆŒ
å˜)¥SÑ)Ô)ð 	¨Y¸!ª^¨^ÝðCÐT]ð Cð Cð Cñô ð õ
 ˜/­3Ñ/Ô/ð 	°OÀiÒ4OÐ4OÐU^ÐapÑUpÐtuÒUuÐUuÝðqØ;Jðqð qØdmðqð qð qñô ð ð VvÐUur   r   c                 ó4   — | j                              ¦   «         S rU   rV   rX   s    r   rY   z#ConstrainedBeamSearchScorer.is_doneõ  rZ   r   c                 ó:   ‡ — ˆ fd„t          |¦  «        D ¦   «         S )Nc                 óL   •— g | ] }t          d „ ‰j        D ¦   «         ¦  «        ‘Œ!S )c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r,   )Úcopy)r>   Ú
constraints     r   r@   zQConstrainedBeamSearchScorer.make_constraint_states.<locals>.<listcomp>.<listcomp>ú  s"   € Ð$ZÐ$ZÐ$Z¸: Z§_¢_Ñ%6Ô%6Ð$ZÐ$ZÐ$Zr   )r   rÄ   )r>   r?   r   s     €r   r@   zFConstrainedBeamSearchScorer.make_constraint_states.<locals>.<listcomp>ú  s5   ø€ ÐnÐnÐnÐ`aÕ#Ð$ZÐ$ZÈÔIYÐ$ZÑ$ZÔ$ZÑ[Ô[ÐnÐnÐnr   )rL   )r   Úns   ` r   Úmake_constraint_statesz2ConstrainedBeamSearchScorer.make_constraint_statesù  s'   ø€ ØnÐnÐnÐnÕejÐklÑemÔemÐnÑnÔnÐnr   c                 óp   — |                       d¦  «        d         }|                     |¦  «         |j        S )Nr
   r   )rÏ   ÚresetÚ	completed)r   ÚsequenceÚ	new_states      r   Úcheck_completes_constraintsz7ConstrainedBeamSearchScorer.check_completes_constraintsü  s5   € Ø×/Ò/°Ñ2Ô2°1Ô5ˆ	Ø�Š˜Ñ!Ô!Ð!ØÔ"Ð"r   r   r   r   r   r   Úscores_for_all_vocabr[   r\   r]   r_   c
                 ó  — |j         d         dz   }
t          | j        ¦  «        }||j         d         | j        z  k    rW| j        dk    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	        |¬	¦  «        }|�Ft          |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   }|�­|                     ¦   «         |v r—|| j        k    }|rŒ<|                      ||                              ¦   «         ¦  «        }|rY|�||         }||fz   }nd
}|                     ||                              ¦   «         |                     ¦   «         ||
|	z
  ¬¦  «         n||||f<   ||||f<   ||||f<   |dz  }|| j        k    r nŒí|                      |||||         ||         ||         ¦  «        \  }}}|||<   |||<   |||<   || j        k     r-t          d| j        › d||         › d|› d||         › d�	¦  «        ‚| j        |         p@|                     ||                              ¦   «                              ¦   «         |
|	¦  «        | j        |<   �Œ`t5          |                     d¦  «        |                     d¦  «        |                     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.
        ra   r
   r   rb   rc   rd   re   rf   rD   Nrg   rh   ri   rj   rl   rm   rn   ro   rp   rq   )ru   rv   rM   r<   r6   rR   r2   r%   rw   rE   rQ   r)   r+   rN   rx   rP   r1   ry   rz   rÕ   Útolistr{   r|   Ústep_sentence_constraintrY   r}   r   r~   )r   r   r   r   r   rÖ   r[   r\   r]   r_   r   r0   r2   rr   rs   rt   r€   r‘   r‚   rƒ   r„   r…   r†   r‡   rˆ   Úcompletes_constraintr‰   Ú
new_scoresÚ
new_tokensÚnew_indicess                                 r   r   z#ConstrainedBeamSearchScorer.process  s5  € ðh ”/ "Ô%¨Ñ)ˆÝ˜œÑ)Ô)ˆ
Ø˜)œ/¨!Ô,°´Ñ?Ò@Ð@ØÔ# aÒ'Ð'Ý ðQ¨I¬O¸AÔ,>ð Qð QØ#œðQð Qð Qñô ð õ
 !ðI i¤o°aÔ&8ð Ið IØ”ðIð Ið Iñô ð ð
 Ô!ˆå œ;¨
°D´OÐ'DÈKÔL]ÐflÐmÑmÔmÐÝ œ;¨
°D´OÐ'DÈKÔL]ÐflÐmÑmÔmÐÝ!œK¨°T´_Ð(EÈ\ÔM_ÐhnÐoÑoÔoÐàÐ#­J°|ÅUÄ\Ñ,RÔ,RÐ#Ý˜,­Ñ,Ô,ð .Ø ,˜~�Ý œ<¨Ñ5Ô5ˆLå#,¨T¬_Ñ#=Ô#=ð H	ñ H	ÑˆI�xØŒz˜)Ô$ð 	Ø”>¥C¨¡M¤MÒ1Ð1Ý$Ð%uÈ4Ì>Ð%uÐ%uÐ%uÑvÔvÐvØÐ'¨<Ð+?Ý$Ð%tÑuÔuÐuà12Ð  ¨A¨A¨A Ñ.Ø1=Ð  ¨A¨A¨A Ñ.Ø23Ð! )¨Q¨Q¨Q ,Ñ/Øð ˆHÝIRÝ�K 	Ô*¨K¸	Ô,BÀLÐQZÔD[Ñ\Ô\ñJô Jð "ð "ÑE�Ñ!E *¨j¸*ð "+¨T¬_Ñ!<¸zÑ!I�à Ð,°:·?²?Ñ3DÔ3DÈÐ3TÐ3Tà=LÐPTÔP_Ò=_Ð:Ø=ð !Ø à+/×+KÒ+KÈIÐVdÔLe×LlÒLlÑLnÔLnÑ+oÔ+oÐ(Ø+ð Ø'Ð3Ø)5°nÔ)E˜JØ)3°~Ð6GÑ)G˜J˜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ð /ð 37×2OÒ2OØØØ$Ø  Ô+Ø  Ô+Ø! )Ô,ñ3ô 3Ñ/ˆJ˜
 Kð +5Ð˜YÑ'Ø*4Ð˜YÑ'Ø+6Ð˜iÑ(à˜$œ/Ò)Ð)Ý ð[˜tœð [ð [¸;ÀyÔ;Qð [ð [Ø$ð[ð [Ø3>¸yÔ3Ið[ð [ð [ñô ð ð %)¤J¨yÔ$9ð %¸X×=MÒ=MØ˜IÔ&×*Ò*Ñ,Ô,×1Ò1Ñ3Ô3°WÐ>Pñ>ô >ˆDŒJ�yÑ!Ñ!õ à$4×$9Ò$9¸"Ñ$=Ô$=Ø$4×$9Ò$9¸"Ñ$=Ô$=Ø%6×%;Ò%;¸BÑ%?Ô%?ðð ñ
ô 
ð 	
r   r€   Úvocab_scoresÚsent_beam_scoresÚsent_beam_tokensÚsent_beam_indicesÚpush_progressc                 ó°
  — |                      d¦  «        }|j        }	|                      |¦  «        }
|                      |¦  «        }||z  |dz   |z  }}|||…         }|||…         }t          j        ||         |                     d¦  «        fd¬¦  «        }|                     ¦   «         g g g g dœ}t          |¦  «        D �]á\  }}|
|         }|                     ||                              ¦   «         ¦  «         ||         }|                     |                     ¦   «         ¦  «         |j	        �sbt          j
        |                     ¦   «         t          j        |	¬¦  «        }|D �])}|                     d¬¦  «        }|                     |                     ¦   «         ¦  «         t          j        ||                     d¦  «        fd¦  «                             ¦   «         }||d	         vr£|d	                              |¦  «         |d
                              ||z   ¦  «         |d                              |¦  «         |d                              ||                              |¦  «        ¦  «         |d                              |¦  «         �Œ+�ŒÔ|�r
t          j        ||         d¦  «        \  }}t          j        ||                     d¦  «        fd¦  «        }||         }|                     ¦   «         }|                     |¦  «         ||d	         vr‡|d	                              |¦  «         |d
                              |¦  «         |d                              |¦  «         |d                              |¦  «         |d                              |¦  «         �Œãt%          |d
         ¦  «        dk    �r”t          j
        |d
         |	¬¦  «        }t          j        |d         ¦  «                             |	¦  «        }t          j        |d         ¦  «                             |	¦  «        }|
|d         z   }t          j        ||fd¦  «        } t          j        ||fd¦  «        }!t          j
        d„ |D ¦   «         |	¬¦  «        }"|"dz  |!z   }#|#                     d¬¦  «        j        }$|"|$         }%d}&|%d         }'g }(|%D ]'})|)|'k    r|&dz  }&nd}&|)}'|(                     |&¦  «         Œ(t          j
        t/          j        |(d¬¦  «        ¦  «        }*|$|*         d |…         }$|!|$         }| |$         }t          j        ||f¦  «        |$         }|||fS )Nr   r
   ra   )Údim)Únew_seqsÚ
new_statesrÝ   rÜ   rÛ   rD   T)Ústatefulrå   rÝ   rÜ   rÛ   ræ   )r2   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r,   )Úget_bank)r>   Úones     r   r@   zHConstrainedBeamSearchScorer.step_sentence_constraint.<locals>.<listcomp>  s    € Ð%KÐ%KÐ%K¸ c§l¢l¡n¤nÐ%KÐ%KÐ%Kr   éd   )Ú
descendingÚ	mergesort)Úkind)Úsizer2   rÏ   r%   ÚcatÚ	unsqueezerØ   rx   rÑ   rÒ   rN   ÚadvanceÚlongrÌ   r{   r¢   Útaker}   rv   ÚstackÚtoÚsortr¸   ÚnpÚargsort)+r   r€   r   rÞ   rß   rà   rá   râ   Úorig_lenr2   Ú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Ú	all_banksÚzippedr¸   Úsorted_banksÚcounterÚcur_bankÚ
incrementsÚbankÚrearrangerss+                                              r   rÙ   z4ConstrainedBeamSearchScorer.step_sentence_constraint   s€  € ð( %×)Ò)¨!Ñ,Ô,ˆØ"Ô)ˆð !%× ;Ò ;¸HÑ EÔ EÐØ$(×$?Ò$?ÀÑ$IÔ$IÐ!à Ñ)¨I¸©M¸XÑ+EˆdˆØ(¨¨d¨Ô3ÐØ".¨t°D¨yÔ"9ÐÝœ) YÐ/@Ô%AÐCS×C]ÒC]Ð^`ÑCaÔCaÐ$bÐhjÐkÑkÔkˆð (×.Ò.Ñ0Ô0ØØØØð
ð 
ˆ	õ !*Ð*>Ñ ?Ô ?ð ?	Bñ ?	BÑˆG�Wð /¨wÔ7ˆJØ×Ò˜_¨WÔ5×<Ò<Ñ>Ô>Ñ?Ô?Ð?à5°gÔ>ˆMØ×Ò §¢Ñ 0Ô 0Ñ1Ô1Ð1à Ô*ñ 1BÝ!&¤¨m×.CÒ.CÑ.EÔ.EÍUÌZÐ`fÐ!gÑ!gÔ!g�Ø%3ð Bñ B�Mà -× 2Ò 2¸DÐ 2Ñ AÔ A�IØ—M’M -×"6Ò"6Ñ"8Ô"8Ñ9Ô9Ð9å"'¤)¨W°m×6MÒ6MÈaÑ6PÔ6PÐ,QÐSUÑ"VÔ"V×"]Ò"]Ñ"_Ô"_�KØ"¨)°JÔ*?Ð?Ð?à! *Ô-×4Ò4°[ÑAÔAÐAØ! -Ô0×7Ò7¸¸w¹ÑGÔGÐGØ! ,Ô/×6Ò6°}ÑEÔEÐEØ! ,Ô/×6Ò6Ð7NÈwÔ7W×7\Ò7\Ð]jÑ7kÔ7kÑlÔlÐlØ! ,Ô/×6Ò6°yÑAÔAÐAùñBð ñ "Bõ( (-¤yÐ1HÈÔ1QÐSTÑ'UÔ'UÑ$�	˜9Ý#œi¨°)×2EÒ2EÀaÑ2HÔ2HÐ(IÈ2ÑNÔN�à 9¸'Ô B�à)×0Ò0Ñ2Ô2�à×#Ò# KÑ0Ô0Ð0Ø i°
Ô&;Ð;Ð;à˜jÔ)×0Ò0°Ñ=Ô=Ð=Ø˜mÔ,×3Ò3°GÑ<Ô<Ð<Ø˜lÔ+×2Ò2°9Ñ=Ô=Ð=Ø˜lÔ+×2Ò2°9Ñ=Ô=Ð=Ø˜lÔ+×2Ò2°=ÑAÔAÐAùåˆy˜Ô'Ñ(Ô(¨1Ò,Ñ,Ýœ, y°Ô'?ÈÐOÑOÔOˆKÝœ Y¨|Ô%<Ñ=Ô=×@Ò@ÀÑHÔHˆJÝœ Y¨|Ô%<Ñ=Ô=×@Ò@ÀÑHÔHˆJà.°¸<Ô1HÑHˆJÝœÐ$4°jÐ#AÀ2ÑFÔFˆJÝœÐ$4°jÐ#AÀ2ÑFÔFˆJÝœÐ%KÐ%KÀ
Ð%KÑ%KÔ%KÐTZÐ[Ñ[Ô[ˆIà ‘_ zÑ1ˆFØ—k’k¨T�kÑ2Ô2Ô:ˆGØ$ WÔ-ˆLð ˆGØ# A”ˆHØˆJØ$ð +ð +�Ø˜8Ò#Ð#Ø˜q‘L�G�Gà�GØ#�HØ×!Ò! 'Ñ*Ô*Ð*Ð*Ýœ,¥r¤z°*À;Ð'OÑ'OÔ'OÑPÔPˆKà˜kÔ*¨9¨H¨9Ô5ˆGà)¨'Ô2ÐØ)¨'Ô2ÐÝ %¤	Ð+<¸kÐ*JÑ KÔ KÈGÔ TÐàÐ!1Ð3DÐDÐDr   rŠ   r‹   rŒ   c
                 óf	  — t          | j        ¦  «        }
|�Ft          |t          j        ¦  «        s,t          |t
          ¦  «        r|g}t          j        |¦  «        }t          | j        ¦  «        D �]s\  }}| j        |         rŒg }t          | j
        ¦  «        D ]¤}|| j
        z  |z   }||                              ¦   «         }||         }|                      |                     ¦   «         ¦  «        }|rJ|�||         nd }|j        d         |	z
  }|                     ||||¬¦  «         |                     |¦  «         Œ¥t          |¦  «        | j        k     rŒt          | j
        ¦  «        D ]w}||vrW|| j
        z  |z   }||                              ¦   «         }||         }|j        d         |	z
  }|                     |||¬¦  «         t          |¦  «        | j        k    r nŒx�Œu|                     |
| j        z  ¦  «        }g }g }t          j        |
| j        z  | j        t          j        ¬¦  «        }t          | j        ¦  «        D ]¶\  }}t-          |j        d„ ¬¦  «        }t          | j        ¦  «        D ]…}|                     ¦   «         }|d         }|d         }|d	         }t          |¦  «        || j        |z  |z   <   |                     |¦  «         |                     |¦  «         |||| j        z  |z   <   Œ†Œ·|                     ¦   «                              ¦   «         dz   } |�t5          | |¦  «        n| }!|                     |
| j        z  |!¦  «        }"t          |¦  «        dk    r'|d         �|                     |
| j        z  |!¦  «        }#nd }#|                     ¦   «                              ¦   «         |                     ¦   «                              ¦   «         k    r&|€t7          d
¦  «        ‚|"                     |¦  «         |#�|#                     d¦  «         t          t;          ||¦  «        ¦  «        D ]`\  }\  }$}%|$|"|d ||         …f<   |#�(t          j        |%¦  «        |#|d t          |%¦  «        …f<   ||         |!k     r|d         |"|||         f<   Œat=          |"||#dœ¦  «        S )Nra   rj   )rk   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›   )rv   rM   rQ   r%   r)   r+   rN   rx   rP   rL   r1   rz   rÕ   rØ   ru   r{   r¢   r5   rž   rw   r2   rŸ   r    r�   r¡   r}   r£   rR   r¤   ry   r   )&r   r   rŠ   r‹   rŒ   r   r[   r\   r]   r_   r0   r€   r‘   Úids_collectÚbeam_idr‡   r¦   r§   rÚ   r‰   rk   r¨   r©   rª   r«   r¬   r¯   r°   r±   r²   r³   r´   rµ   r¶   r·   r¸   r¹   rº   s&                                         r   r   z$ConstrainedBeamSearchScorer.finalize-  s  € õ ˜œÑ)Ô)ˆ
àÐ#­J°|ÅUÄ\Ñ,RÔ,RÐ#Ý˜,­Ñ,Ô,ð .Ø ,˜~�Ý œ<¨Ñ5Ô5ˆLõ $-¨T¬_Ñ#=Ô#=ð 	ñ 	ÑˆI�xØŒz˜)Ô$ð Øð
 ˆKÝ  ¤Ñ0Ô0ð 
0ð 
0�Ø!*¨T¬^Ñ!;¸gÑ!E�Ø/°Ô?×DÒDÑFÔF�Ø(¨Ô8�à'+×'GÒ'GÈ×H[ÒH[ÑH]ÔH]Ñ'^Ô'^Ð$Ø'ð 0ØAMÐAY ¨nÔ!=Ð!=Ð_c�JØ$0Ô$6°rÔ$:Ð=OÑ$O�MØ—L’L ¨{ÈÐcp�LÑqÔqÐqØ×&Ò& wÑ/Ô/Ð/øõ �;ÑÔ $Ô"<Ò<Ð<Ý$ T¤^Ñ4Ô4ð ð �GØ kÐ1Ð1Ø)2°T´^Ñ)CÀgÑ)M˜Ø&7¸Ô&G×&LÒ&LÑ&NÔ&N˜Ø'0°Ô'@˜Ø(4Ô(:¸2Ô(>ÐASÑ(S˜Ø Ÿš \°;Èm˜Ñ\Ô\Ð\Ý˜;Ñ'Ô'¨4Ô+EÒEÐEØ˜ð Fùð !—}’} Z°$Ô2LÑ%LÑMÔMˆØˆØˆÝ”k *¨tÔ/IÑ"IÐRVÔR]ÕejÔerÐsÑsÔsˆõ % T¤_Ñ5Ô5ð 	Mð 	M‰KˆAˆxÝ  ¤°^°^ÐDÑDÔDˆKÝ˜4Ô5Ñ6Ô6ð Mð M�Ø!,§¢Ñ!2Ô!2�Ø+¨AÔ.�
Ø)¨!Ô,�Ø+¨AÔ.�
ÝCFÀxÁ=Ä=�˜TÔ7¸!Ñ;¸aÑ?Ñ@ð —’˜HÑ%Ô%Ð%ð ×#Ò# JÑ/Ô/Ð/àBL�˜A Ô :Ñ:¸QÑ>Ñ?Ð?ðMð  (×+Ò+Ñ-Ô-×2Ò2Ñ4Ô4°qÑ8Ðà<FÐ<R•sÐ+¨ZÑ8Ô8Ð8ÐXhˆØ$-§M¢M°*¸tÔ?YÑ2YÐ[gÑ$hÔ$hˆåˆ|ÑÔ˜qÒ Ð  \°!¤_Ð%@Ø(1¯ª°jÀ4ÔC]Ñ6]Ð_kÑ(lÔ(lˆGˆGàˆGð ×ÒÑÔ×"Ò"Ñ$Ô$¨×(8Ò(8Ñ(:Ô(:×(?Ò(?Ñ(AÔ(AÒAÐAØÐ#Ý Ð!CÑDÔDÐDØ�MŠM˜,Ñ'Ô'Ð'àÐØ�MŠM˜"ÑÔÐõ $-­S°°|Ñ-DÔ-DÑ#EÔ#Eð 	>ð 	>ÑˆAÑ��hØ,0ˆG�AÐ(˜ aœÐ(Ð(Ñ)àÐ"Ý.3¬l¸8Ñ.DÔ.D�˜˜?�S ™]œ]˜?Ð*Ñ+à˜AŒ Ò-Ð-à.:¸1¬o�˜˜<¨œ?Ð*Ñ+øåà$Ø#.Ø 'ðð ñ
ô 
ð 	
r   r»   r¼   rB   )r    r!   r"   r#   r+   rÀ   r   r%   r2   r   r½   r   rO   r¾   rS   r¿   rY   rÏ   rÕ   r&   r'   r)   r(   r   rÙ   r   r,   r   r   rÃ   rÃ   £  s`  € € € € € ð"ð "ðT +.Ø8=Ø/0Ø)*Ø$(ð+ð +àð+ð ð+ð ˜*Ô%ð	+ð
 ”ð+ð ! œð+ð $ E¨$°¨)Ô$4Ô5ð+ð  (¨œ}ð+ð " #œð+ð ˜S”Mð+ð +ð +ð +ðZ ð ˜ð  ð  ð  ñ „Xð ðoð oð 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ð ðKEð KEð KEð KEðh <@ØFJØ37Ø,-ðr
ð 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
ð r
ð r
ð 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dS )r;   Nr1   r3   r:   r   c                 ó¾   — || _         || _        || _        || _        g | _        d| _        t          | j        t          ¦  «        s| j        €t          d¦  «        ‚dS dS )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.)	r3   r:   r   r1   r�   Úworst_scorerQ   rO   rR   )r   r1   r3   r:   r   s        r   rS   zBeamHypotheses.__init__£  su   € ð -ˆÔØ,ˆÔØ$ˆŒØ"ˆŒØˆŒ
ØˆÔå˜$Ô-­tÑ4Ô4ð 	¸¼Ð9PÝðEñô ð ð	ð 	Ð9PÐ9Pr   c                 ó*   — t          | j        ¦  «        S )z3
        Number of hypotheses in the list.
        )rv   r�   rX   s    r   Ú__len__zBeamHypotheses.__len__´  s   € õ �4”:‰ŒÐr   ÚhypÚsum_logprobsr]   rk   c                 óæ  — |�||| j         z  z  }n||j        d         | j         z  z  }t          | ¦  «        | j        k     s|| j        k    r¥| j                             |||f¦  «         t          | ¦  «        | j        k    rTt          d„ t          | j        ¦  «        D ¦   «         ¦  «        }| j        |d         d         = |d         d         | _        dS t          || j        ¦  «        | _        dS dS )z3
        Add a new hypothesis to the list.
        Nra   c                 ó$   — g | ]\  }\  }}}||f‘ŒS r,   r,   )r>   ÚidxÚsr?   s       r   r@   z&BeamHypotheses.add.<locals>.<listcomp>Í  s&   € Ð,bÐ,bÐ,b¹.¸#¹yÀÀ1Àa¨a°¨XÐ,bÐ,bÐ,br   r   r
   )
r3   ru   rv   r1   r  r�   r¢   r    rx   r£   )r   r   r!  r]   rk   ÚscoreÚsorted_next_scoress          r   r{   zBeamHypotheses.addº  s  € ð Ð$Ø  M°4Ô3FÑ$FÑGˆEˆEð ! C¤I¨b¤M°TÔ5HÑ$HÑIˆEåˆt‰9Œ9�t”~Ò%Ð%¨°Ô1AÒ)AÐ)AØŒJ×Ò˜u c¨<Ð8Ñ9Ô9Ð9Ý�4‰yŒy˜4œ>Ò)Ð)Ý%+Ð,bÐ,bÍIÐVZÔV`ÑLaÔLaÐ,bÑ,bÔ,bÑ%cÔ%cÐ"Ø”JÐ1°!Ô4°QÔ7Ð8Ø#5°aÔ#8¸Ô#;�Ô Ð Ð å#& u¨dÔ.>Ñ#?Ô#?�Ô Ð Ð ð *BÐ)Ar   r   Úbest_sum_logprobsr   r_   r   c                 óH  — t          | ¦  «        | j        k     rdS | j        du rdS | j        du r|||z
  | j        z  z  }| j        |k    }|S | j        dk    r0| 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)rv   r1   r:   r3   r  r   rR   )r   r(  r   r_   Úhighest_attainable_scoreÚrets         r   rY   zBeamHypotheses.is_doneÓ  së   € õ ˆt‰9Œ9�t”~Ò%Ð%Ø�5ð Ô $Ð&Ð&Ø�4ð Ô  EÐ)Ð)Ø'8¸GÐFXÑ<XÐ]aÔ]pÑ;pÑ'pÐ$ØÔ"Ð&>Ò>ˆCØˆJð Ô" SÒ(Ð(Ø”?Ð&8Ò8Ð8Ý$Ð%ZÑ[Ô[Ð[à%¨¬Ð;MÑ)MÐRVÔReÑ(eÑeð )Ð(ð
 ,=ÀÐJ\Ñ@\ÐaeÔatÑ?tÑ+tÐ(ØÔ"Ð&>Ò>ˆCØˆJr   rU   )NN)r   )r    r!   r"   r+   r½   rO   r   rS   r  r%   r&   r{   rY   r,   r   r   r;   r;   ¢  sû   € € € € € ðð  #ð °uð Èdð Ð`hÐilÔ`mð ð ð ð ð"ð ð ð 48Ø'+ð@ð @àÔð@ð ð@ð ˜uÔ/Ô0ð	@ð
   ”}ð@ð @ð @ð @ð2"ð "¨ð "¸ð "ÐRZÐ[^ÔR_ð "Ðhlð "ð "ð "ð "ð "ð "r   r;   )Úabcr   r   Úcollectionsr   Útypingr   r   Únumpyrø   r%   Úutilsr	   Úbeam_constraintsr   r   r$   r*   r   r.   rÃ   r;   r,   r   r   ú<module>r2     sn  ðð  $Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø  Ð  Ð  Ð  Ð  Ð  Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€à (Ð (Ð (Ð (Ð (Ð (Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =ð"Ð ðHÐ ð8Að Að Að Að A�ñ Aô Að Að@e
ð e
ð e
ð e
ð e
�zñ e
ô e
ð e
ðP	|
ð |
ð |
ð |
ð |
 *ñ |
ô |
ð |
ð~Sð Sð Sð Sð Sñ Sô Sð Sð Sð Sr   