Ë
    S^(hƒÅ  ã                   ó¶  — d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	 d dl
Z
d dlZd dlmZ d dlZd dlmZ ddlmZmZmZ 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m Z m!Z!m"Z"m#Z#m$Z$m%Z%  ejL                  e'«      Z(e
jR                  jT                   G d„ de«      «       Z+e
jR                  jT                   G d„ de«      «       Z,e
jR                  jT                   G d„ de«      «       Z-e
jR                  jT                   G d„ d«      «       Z.e
jR                  jT                   G d„ d«      «       Z/e
jR                  jT                   G d„ d«      «       Z0 G d„ d«      Z1y)é    N)Úpartial)ÚAnyÚDictÚOptionalÚUnion)Úlaxé   )Ú FLAX_MODEL_FOR_CAUSAL_LM_MAPPINGÚ+FLAX_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPINGÚ#FLAX_MODEL_FOR_VISION_2_SEQ_MAPPING)ÚModelOutputÚloggingé   )ÚGenerationConfig)Ú!FlaxForcedBOSTokenLogitsProcessorÚ!FlaxForcedEOSTokenLogitsProcessorÚFlaxForceTokensLogitsProcessorÚFlaxLogitsProcessorListÚFlaxMinLengthLogitsProcessorÚ FlaxNoRepeatNGramLogitsProcessorÚ(FlaxSuppressTokensAtBeginLogitsProcessorÚ!FlaxSuppressTokensLogitsProcessorÚFlaxTemperatureLogitsWarperÚFlaxTopKLogitsWarperÚFlaxTopPLogitsWarperc                   ó:   — e Zd ZU dZdZeej                     ed<   y)ÚFlaxGreedySearchOutputzÔ
    Flax Base class for outputs of decoder-only generation models using greedy search.


    Args:
        sequences (`jnp.ndarray` of shape `(batch_size, max_length)`):
            The generated sequences.
    NÚ	sequences©	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚjnpÚndarrayÚ__annotations__© ó    ú`/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/generation/flax_utils.pyr   r   7   ó   … ñð (,€Iˆx˜Ÿ™Ñ$Ô+r(   r   c                   ó:   — e Zd ZU dZdZeej                     ed<   y)ÚFlaxSampleOutputzÏ
    Flax Base class for outputs of decoder-only generation models using sampling.


    Args:
        sequences (`jnp.ndarray` of shape `(batch_size, max_length)`):
            The generated sequences.
    Nr   r   r'   r(   r)   r,   r,   E   r*   r(   r,   c                   ób   — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   y)ÚFlaxBeamSearchOutputaT  
    Flax Base class for outputs of decoder-only generation models using greedy search.


    Args:
        sequences (`jnp.ndarray` of shape `(batch_size, max_length)`):
            The generated sequences.
        scores (`jnp.ndarray` of shape `(batch_size,)`):
            The scores (log probabilities) of the generated sequences.
    Nr   Úscores)
r    r!   r"   r#   r   r   r$   r%   r&   r/   r'   r(   r)   r.   r.   S   s/   … ñ	ð (,€Iˆx˜Ÿ™Ñ$Ó+Ø$(€FˆH�S—[‘[Ñ!Ô(r(   r.   c                   ó®   — e Zd ZU ej                  ed<   ej                  ed<   ej                  ed<   ej                  ed<   eeej                  f   ed<   y)ÚGreedyStateÚcur_lenr   Úrunning_tokenÚis_sent_finishedÚmodel_kwargsN©r    r!   r"   r$   r%   r&   r   Ústrr'   r(   r)   r1   r1   d   s>   … à�[‰[ÓØ�{‰{ÓØ—;‘;ÓØ—k‘kÓ!Ø�s˜CŸK™KÐ'Ñ(Ô(r(   r1   c                   óÌ   — e Zd ZU ej                  ed<   ej                  ed<   ej                  ed<   ej                  ed<   ej                  ed<   eeej                  f   ed<   y)ÚSampleStater2   r   r3   r4   Úprng_keyr5   Nr6   r'   r(   r)   r9   r9   m   sH   … à�[‰[ÓØ�{‰{ÓØ—;‘;ÓØ—k‘kÓ!Ø�k‰kÓØ�s˜CŸK™KÐ'Ñ(Ô(r(   r9   c                   óê   — e Zd ZU ej                  ed<   ej                  ed<   ej                  ed<   ej                  ed<   ej                  ed<   ej                  ed<   eeej                  f   ed<   y)	ÚBeamSearchStater2   Úrunning_sequencesÚrunning_scoresr   r/   r4   r5   Nr6   r'   r(   r)   r<   r<   w   sR   … à�[‰[ÓØ—{‘{Ó"Ø—K‘KÓØ�{‰{ÓØ�K‰KÓØ—k‘kÓ!Ø�s˜CŸK™KÐ'Ñ(Ô(r(   r<   c                   óØ  — e Zd ZdZd„ Zed„ «       Zd„ Z	 	 	 d(dede	e   de	e   d	e	e
eej                  f      d
ej                  f
d„Z	 d)de	e   de	e   d
efd„Zed„ «       Zd„ Zd„ Zd	e
eef   fd„Z	 	 	 	 	 d*dej                  de	e   de	ej                     dede	e
eej                  f      de	e   fd„Zded
efd„Zdedede	e   d
efd„Zdeded
efd„Z	 	 	 	 	 	 	 d+ddde	e   de	e   d e	e   de	e   dede	e
eej                  f      d	e	e
eej                  f      fd!„Z	 	 	 	 	 	 	 	 	 d,ddde	e   de	e   d e	e   de	ej                     de	e   d"e	e   dede	e
eej                  f      d	e	e
eej                  f      fd#„Z	 	 	 	 	 	 	 	 	 	 d-ddde	e   de	e   d e	e   d$e	e   d%e	eeef      de	e   dede	e
eej                  f      d&e	e   d	e	e
eej                  f      fd'„Z y).ÚFlaxGenerationMixina…  
    A class containing all functions for auto-regressive text generation, to be used as a mixin in
    [`FlaxPreTrainedModel`].

    The class exposes [`~generation.FlaxGenerationMixin.generate`], which can be used for:
            - *greedy decoding* by calling [`~generation.FlaxGenerationMixin._greedy_search`] if `num_beams=1` and
              `do_sample=False`
            - *multinomial sampling* by calling [`~generation.FlaxGenerationMixin._sample`] if `num_beams=1` and
              `do_sample=True`
            - *beam-search decoding* by calling [`~generation.FlaxGenerationMixin._beam_search`] if `num_beams>1` and
              `do_sample=False`

    You do not need to call any of the above methods directly. Pass custom parameter values to 'generate' instead. To
    learn more about decoding strategies refer to the [text generation strategies guide](../generation_strategies).
    c                 ó   — t        d«      ‚)NzbA model class needs to define a `prepare_inputs_for_generation` method in order to use `generate`.)ÚNotImplementedError)ÚselfÚargsÚkwargss      r)   Úprepare_inputs_for_generationz1FlaxGenerationMixin.prepare_inputs_for_generation“   s   € Ü!Øpó
ð 	
r(   c                 ó<   — |} | |«      r ||«      } | |«      rŒ|S )zc
        Run generation in untraced mode. This should only be used for debugging purposes.
        r'   )Úcond_fnÚbody_fnÚ
init_stateÚstates       r)   Ú_run_loop_in_debugz&FlaxGenerationMixin._run_loop_in_debug˜   s'   € ð
 ˆÙ�eŒnÙ˜E“NˆEñ �e�nàˆr(   c                 óÎ   — |j                  «       D ��ci c]*  \  }}|j                  d«      s|j                  d«      s||“Œ, }}} | j                  |f|ddœ|¤Ž|d<   |S c c}}w )NÚdecoder_Ú
cross_attnT)ÚparamsÚreturn_dictÚencoder_outputs)ÚitemsÚ
startswithÚencode)rC   Ú	input_idsrP   r5   ÚargumentÚvalueÚencoder_kwargss          r)   Ú._prepare_encoder_decoder_kwargs_for_generationzBFlaxGenerationMixin._prepare_encoder_decoder_kwargs_for_generation¢   s~   € ð $0×#5Ñ#5Ó#7÷
á�˜%Ø×'Ñ'¨
Ô3°x×7JÑ7JÈ<Ô7Xð �e‰Oð
ˆñ 
ð
 +6¨$¯+©+°iÐ*sÈÐ\`Ñ*sÐdrÑ*sˆÐ&Ñ'ØÐùó
s   ”/A!NÚ
batch_sizeÚdecoder_start_token_idÚbos_token_idr5   Úreturnc                 óÌ   — |�d|v r|j                  d«      }|�|S | j                  ||«      }t        j                  |d¬«      j	                  dd«      j                  |d¬«      S )NÚdecoder_input_idsÚi4©Údtyper   éÿÿÿÿr   ©Úaxis)ÚpopÚ_get_decoder_start_token_idr$   ÚarrayÚreshapeÚrepeat)rC   r[   r\   r]   r5   r`   s         r)   Ú)_prepare_decoder_input_ids_for_generationz=FlaxGenerationMixin._prepare_decoder_input_ids_for_generation«   sv   € ð Ð#Ð(;¸|Ñ(Kà ,× 0Ñ 0Ð1DÓ EÐØ Ð,Ø(Ð(Ø!%×!AÑ!AÐBXÐZfÓ!gÐÜ�y‰yÐ/°tÔ<×DÑDÀQÈÓK×RÑRÐS]ÐdeÐRÓfÐfr(   c                 óh  — |�|n| j                   j                  }|�|n| j                   j                  }|�|S t        | j                  d«      r`t        | j                  j
                  d«      r@| j                  j
                  j                  � | j                  j
                  j                  S |�|S t        | j                  d«      r`t        | j                  j
                  d«      r@| j                  j
                  j                  � | j                  j
                  j                  S t        d«      ‚)NÚdecoderr\   r]   z\`decoder_start_token_id` or `bos_token_id` has to be defined for encoder-decoder generation.)Úgeneration_configr\   r]   ÚhasattrÚconfigrn   Ú
ValueError)rC   r\   r]   s      r)   rh   z/FlaxGenerationMixin._get_decoder_start_token_idº   s  € ð &Ð1ñ #à×'Ñ'×>Ñ>ð 	ð
 (4Ð'?‘|ÀT×E[ÑE[×EhÑEhˆØ!Ð-Ø)Ð)ä�D—K‘K Ô+Ü˜Ÿ™×+Ñ+Ð-EÔFØ—‘×#Ñ#×:Ñ:ÐFà—;‘;×&Ñ&×=Ñ=Ð=ØÐ%ØÐä�D—K‘K Ô+Ü˜Ÿ™×+Ñ+¨^Ô<Ø—‘×#Ñ#×0Ñ0Ð<à—;‘;×&Ñ&×3Ñ3Ð3ÜØjó
ð 	
r(   c                 óz   — t        j                  | d d …d f   | j                  d   |f| j                  dd  z   «      S )Nr   r   )r$   Úbroadcast_toÚshape)ÚtensorÚ	num_beamss     r)   Ú_expand_to_num_beamsz(FlaxGenerationMixin._expand_to_num_beamsÙ   s?   € ä×Ñ ¢q¨$ w¡°&·,±,¸q±/À9Ð1MÐPV×P\ÑP\Ð]^Ð]_ÐP`Ñ1`ÓaÐar(   c                 ó   — |S )zö
        This function can be overwritten in the specific modeling_flax_<model-name>.py classes to allow for custom beam
        search behavior. Note that the only model that overwrites this method is [`~transformes.FlaxMarianMTModel`].
        r'   )rC   Úlogitss     r)   Ú_adapt_logits_for_beam_searchz1FlaxGenerationMixin._adapt_logits_for_beam_searchÝ   s	   € ð
 ˆr(   c                 óN  — | j                  «       s•t        t        t        g}t	        «       }|D ]F  }|j                  t        | j                  «      d¬«      }|€Œ,|j                  |j                  «       ŒH d| j                  j                  › d�}|r|d|› �z  }t        |«      ‚y)z™
        Confirms that the model class is compatible with generation. If not, raises an exception that points to the
        right class to use.
        N)ÚdefaultzThe current model class (zQ) is not compatible with `.generate()`, as it doesn't have a language model head.z2 Please use one of the following classes instead: )Úcan_generater
   r   r   ÚsetÚgetÚtyperq   Úaddr    Ú	__class__Ú	TypeError)rC   Úgenerate_compatible_mappingsÚgenerate_compatible_classesÚmodel_mappingÚsupported_modelsÚexception_messages         r)   Ú_validate_model_classz)FlaxGenerationMixin._validate_model_classä   sÆ   € ð
 × Ñ Ô"ä0Ü3Ü;ð,Ð(ô
 +.«%Ð'Ø!=ò O�Ø#0×#4Ñ#4´T¸$¿+¹+Ó5FÐPTÐ#4Ó#UÐ Ø#Ñ/Ø/×3Ñ3Ð4D×4MÑ4MÕNðOð
 ,¨D¯N©N×,CÑ,CÐ+Dð E9ð 9ð ñ +Ø!Ð'YÐZuÐYvÐ%wÑwÐ!ÜÐ-Ó.Ð.ð# #r(   c                 ój  — g }t        t        j                  | j                  «      j                  «      }d|v sd|v r5|t        t        j                  | j
                  «      j                  «      z  }|j                  «       D ]  \  }}|€Œ	||vsŒ|j                  |«       Œ  |rt        d|› d�«      ‚y)zXValidates model kwargs for generation. Generate argument typos will also be caught here.rE   r5   Nz8The following `model_kwargs` are not used by the model: zG (note: typos in the generate arguments will also show up in this list))	r   ÚinspectÚ	signaturerF   Ú
parametersÚ__call__rS   Úappendrr   )rC   r5   Úunused_model_argsÚ
model_argsÚkeyrX   s         r)   Ú_validate_model_kwargsz*FlaxGenerationMixin._validate_model_kwargsü   sÂ   € àÐÜœ×*Ñ*¨4×+MÑ+MÓN×YÑYÓZˆ
ð �zÑ! ^°zÑ%AØœ#œg×/Ñ/°·±Ó>×IÑIÓJÑJˆJØ&×,Ñ,Ó.ò 	.‰JˆC�ØÑ  S°
Ò%:Ø!×(Ñ(¨Õ-ð	.ñ ÜØJÐK\ÐJ]ð ^Fð Fóð ð r(   rV   ro   r:   ÚtracerP   Úlogits_processorc                 óX  — | j                  «        |€˜| j                  j                  rv| j                  j                  t	        | j                  «      k(  rJt        j                  | j                  «      }|| j                  k7  rt        j                  d«       || _        | j                  }t        j                  |«      } |j                  d&i |¤Ž}	| j                  |	j                  «       «       |�|n	t        «       }|�|nt        j                   j#                  d«      }|j$                  €Z|j&                  �N|	j)                  d«      €t*        j-                  d«       |j&                  }
t/        |
t0        «      r|
d   }
|
|_        |j2                  €!| j                  j4                  rt7        d«      ‚| j                  j4                  sO|sM|j$                  �At9        j:                  |dd…df   |j$                  k(  «      dkD  rt*        j-                  d«       |j<                  d   }| j                  j4                  rM|	j)                  d	«      €| j?                  |||	«      }	| jA                  ||j2                  |jB                  |	¬
«      }|j<                  d   }|j)                  d«      du xr |jD                  du}|rD|jF                  €8|jD                  dk(  r)t        j                  d|jD                  › d�tH        «       nÈ|jF                  �S|s<|jD                  �0t*        j-                  d|jF                  › d|jD                  › d�«       |jF                  |z   |_"        ni|jD                  t        «       jD                  k(  rH|jD                  |z   |_"        tK        | j                  dd«      }|�tM        |jD                  |«      |_"        |jN                  �?|jN                  |jD                  kD  r&t7        d|jN                  › d|jD                  › d�«      ‚||jD                  k\  rC| j                  j4                  rdnd}t*        j-                  d|› d|› d|jD                  › d�«       | jQ                  |||¬«      }|jR                  sF|jT                  dk(  r7| jW                  ||jD                  |j$                  |j&                  ||||	¬«      S |jR                  rZ|jT                  dk(  rK| jY                  |¬«      }| j[                  ||jD                  |j$                  |j&                  ||||||	¬ «
      S |jR                  sà|jT                  dkD  rÑ| j]                  ||jT                  ¬!«      }d	|	v r)| j]                  |	d	   d"   |jT                  ¬!«      |	d	   d"<   d#D ]*  }||	v sŒ| j]                  |	|   |jT                  ¬!«      |	|<   Œ, | j_                  ||jD                  |j$                  |j&                  |j`                  |jb                  ||||jd                  |	¬$«      S tg        d%«      ‚)'a¶  
        Generates sequences of token ids for models with a language modeling head.

        Parameters:
            input_ids (`jnp.ndarray` of shape `(batch_size, sequence_length)`):
                The sequence used as a prompt for the generation.
            generation_config (`~generation.GenerationConfig`, *optional*):
                The generation configuration to be used as base parametrization for the generation call. `**kwargs`
                passed to generate matching the attributes of `generation_config` will override them. If
                `generation_config` is not provided, the default will be used, which had the following loading
                priority: 1) from the `generation_config.json` model file, if it exists; 2) from the model
                configuration. Please note that unspecified parameters will inherit [`~generation.GenerationConfig`]'s
                default values, whose documentation should be checked to parameterize generation.
            trace (`bool`, *optional*, defaults to `True`):
                Whether to trace generation. Setting `trace=False` should only be used for debugging and will lead to a
                considerably slower runtime.
            params (`Dict[str, jnp.ndarray]`, *optional*):
                Optionally the model parameters can be passed. Can be useful for parallelized generation.
            logits_processor (`FlaxLogitsProcessorList `, *optional*):
                Custom logits processors that complement the default logits processors built from arguments and
                generation config. If a logit processor is passed that is already created with the arguments or a
                generation config an error is thrown. This feature is intended for advanced users.
            kwargs (`Dict[str, Any]`, *optional*):
                Ad hoc parametrization of `generate_config` and/or additional model-specific kwargs that will be
                forwarded to the `forward` function of the model. If the model is an encoder-decoder model, encoder
                specific kwargs should not be prefixed and decoder specific kwargs should be prefixed with *decoder_*.

        Return:
            [`~utils.ModelOutput`].

        NaS  You have modified the pretrained model configuration to control generation. This is a deprecated strategy to control generation and will be removed soon, in a future version. Please use and modify the model generation configuration (see https://huggingface.co/docs/transformers/generation_strategies#default-text-generation-configuration )r   Úattention_maskz²The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.zJ`decoder_start_token_id` has to be defined for encoder-decoder generation.rd   z¬A decoder-only architecture is being used, but right-padding was detected! For correct generation results, please set `padding_side='left'` when initializing the tokenizer.rR   )r\   r]   r5   Ú
max_lengthé   z0Using the model-agnostic default `max_length` (=zx) to control the generation length.  recommend setting `max_new_tokens` to control the maximum length of the generation.zBoth `max_new_tokens` (=z) and `max_length`(=zÇ) seem to have been set. `max_new_tokens` will take precedence. Please refer to the documentation for more information. (https://huggingface.co/docs/transformers/main/en/main_classes/text_generation)Úmax_position_embeddingsz3Unfeasable length constraints: the minimum length (z%) is larger than the maximum length (ú)r`   rV   zInput length of z is z, but `max_length` is set to zW. This can lead to unexpected behavior. You should consider increasing`max_new_tokens`.)ro   Úinput_ids_seq_lengthr–   r   )r–   r•   rP   r5   )ro   )Úlogits_warperr–   r•   rP   r5   )rw   Úlast_hidden_state©r˜   Údecoder_attention_mask)Úlength_penaltyÚearly_stoppingr–   r•   rP   Únum_return_sequencesr5   z,`Beam sampling is currently not implemented.r'   )4rŠ   ro   Ú_from_model_configÚ_original_object_hashÚhashr   Úfrom_model_configrq   ÚwarningsÚwarnÚcopyÚdeepcopyÚupdater”   r   ÚjaxÚrandomÚPRNGKeyÚpad_token_idÚeos_token_idr€   ÚloggerÚwarningÚ
isinstanceÚlistr\   Úis_encoder_decoderrr   r$   Úsumru   rZ   rl   r]   r™   Úmax_new_tokensÚUserWarningÚgetattrÚminÚ
min_lengthÚ_get_logits_processorÚ	do_samplerw   Ú_greedy_searchÚ_get_logits_warperÚ_samplerx   Ú_beam_searchr¢   r£   r¤   rB   )rC   rV   ro   r:   r•   rP   r–   rE   Únew_generation_configr5   r²   r[   r�   Úhas_default_max_lengthr›   Úinput_ids_stringrž   Úkwargs                     r)   ÚgeneratezFlaxGenerationMixin.generate  sx  € ðT 	×"Ñ"Ô$ð Ð$ð
 ×%Ñ%×8Ò8¸T×=SÑ=S×=iÑ=iÔmqØ×&Ñ&ónò >ô )9×(JÑ(JÈ4Ï;É;Ó(WÐ%Ø(¨D×,BÑ,BÒBÜ—M‘MðBôð .C�DÔ*Ø $× 6Ñ 6Ðä ŸM™MÐ*;Ó<ÐØ/Ð(×/Ñ/Ñ9°&Ñ9ˆØ×#Ñ# L×$5Ñ$5Ó$7Ô8à/?Ð/KÑ+ÔQhÓQjÐð  (Ð3‘8¼¿¹×9KÑ9KÈAÓ9Nˆà×)Ñ)Ð1Ð6G×6TÑ6TÐ6`Ø×ÑÐ 0Ó1Ð9Ü—‘ðqôð -×9Ñ9ˆLÜ˜,¬Ô-Ø+¨A™�Ø-9ÐÔ*à×3Ñ3Ð;ÀÇÁ×@^Ò@^ÜÐiÓjÐjð �{‰{×-Ò-±eà!×.Ñ.Ð:Ü—G‘G˜I¢a¨ eÑ,Ð0A×0NÑ0NÑNÓOÐRSÒSä—‘ðlôð
 —_‘_ QÑ'ˆ
à�;‰;×)Ò)à×ÑÐ 1Ó2Ð:Ø#×RÑRÐS\Ð^dÐfrÓs�à×FÑFØØ'8×'OÑ'OØ.×;Ñ;Ø)ð	 Gó ˆIð  )Ÿ™¨rÑ2ÐØ!'§¡¨LÓ!9¸TÐ!AÒ!nÐFW×FbÑFbÐjnÐFnÐÙ!Ð&7×&FÑ&FÐ&NÐSd×SoÑSoÐsuÒSuä�M‰MØBÐCT×C_ÑC_ÐB`ð aIð Iäõð
 ×-Ñ-Ð9Ù)Ð.?×.JÑ.JÐ.VÜ—‘Ø.Ð/@×/OÑ/OÐ.PÐPdØ(×3Ñ3Ð4ð 5fðfôð ,=×+KÑ+KÐNbÑ+bÐÕ(à ×+Ñ+Ô/?Ó/A×/LÑ/LÒLØ/@×/KÑ/KÐNbÑ/bÐ!Ô,Ü*1°$·+±+Ð?XÐZ^Ó*_Ð'Ø*Ð6Ü36Ð7H×7SÑ7SÐUlÓ3mÐ%Ô0à×'Ñ'Ð3Ð8I×8TÑ8TÐWh×WsÑWsÒ8sÜØEÐFW×FbÑFbÐEcð d(Ø(9×(DÑ(DÐ'EÀQðHóð ð  Ð#4×#?Ñ#?Ò?Ø6:·k±k×6TÒ6TÑ2ÐZeÐÜ�N‰NØ"Ð#3Ð"4°DÐ9MÐ8Nð OØ%×0Ñ0Ð1ð 2/ð/ôð  ×5Ñ5Ø/Ø!5Ø-ð 6ó 
Ðð !×*Ò*Ð/@×/JÑ/JÈaÒ/OØ×&Ñ&ØØ!×,Ñ,Ø!×.Ñ.Ø!×.Ñ.Ø!1ØØØ)ð 'ó 	ð 	ð ×(Ò(Ð->×-HÑ-HÈAÒ-MØ ×3Ñ3ÐFWÐ3ÓXˆMØ—<‘<ØØ!×,Ñ,Ø!×.Ñ.Ø!×.Ñ.ØØ+Ø!1ØØØ)ð  ó ð ð #×,Ò,Ð1B×1LÑ1LÈqÒ1Pà×1Ñ1°)ÐGX×GbÑGbÐ1ÓcˆIà  LÑ0ØGK×G`ÑG`Ø Ð!2Ñ3Ð4GÑHÐTe×ToÑToð Haó H�Ð.Ñ/Ð0CÑDð Fò �Ø˜LÒ(Ø*.×*CÑ*CØ$ UÑ+Ð7H×7RÑ7Rð +Dó +�L Ò'ðð ×$Ñ$ØØ!×,Ñ,Ø!×.Ñ.Ø!×.Ñ.Ø0×?Ñ?Ø0×?Ñ?Ø!1ØØØ%6×%KÑ%KØ)ð %ó ð ô &Ð&TÓUÐUr(   c                 óœ  — t        «       }|j                  �3|j                  dk7  r$|j                  t        |j                  «      «       |j                  �5|j                  dk7  r&|j                  t        |j                  d¬«      «       |j                  �5|j                  dk  r&|j                  t        |j                  d¬«      «       |S )z¯
        This class returns a [`FlaxLogitsProcessorList`] list object that contains all relevant [`FlaxLogitsWarper`]
        instances used for multinomial sampling.
        g      ð?r   r   )Útop_kÚmin_tokens_to_keep)Útop_prË   )r   Útemperaturer�   r   rÊ   r   rÌ   r   )rC   ro   Úwarperss      r)   rÁ   z&FlaxGenerationMixin._get_logits_warperã  s±   € ô
 *Ó+ˆà×(Ñ(Ð4Ð9J×9VÑ9VÐZ]Ò9]Ø�N‰NÔ6Ð7H×7TÑ7TÓUÔVØ×"Ñ"Ð.Ð3D×3JÑ3JÈaÒ3OØ�N‰NÔ/Ð6G×6MÑ6MÐbcÔdÔeØ×"Ñ"Ð.Ð3D×3JÑ3JÈSÒ3PØ�N‰NÔ/Ð6G×6MÑ6MÐbcÔdÔeàˆr(   r�   c                 óJ  — t        «       }|j                  �J|j                  �>|j                  dkD  r/|j                  t	        |j                  |j                  «      «       |j
                  �$|j                  t        |j
                  «      «       |j                  �/|j                  t        |j                  |j                  «      «       |j                  �$|j                  t        |j                  «      «       |j                  �x|}|dkD  s|j
                  €|n|dz   }|j                  �-t        |j                  «      dkD  r||j                  d   d   z  }|j                  t        |j                  |«      «       |j                  �A|j                  D �cg c]  }||d   z   dz
  |d   g‘Œ }}|j                  t!        |«      «       |j"                  �3|j"                  dkD  r$|j                  t%        |j"                  «      «       | j'                  ||«      }|S c c}w )zÉ
        This class returns a [`FlaxLogitsProcessorList`] list object that contains all relevant [`FlaxLogitsProcessor`]
        instances used to modify the scores of the language model head.
        rd   r   r   )r   r½   r²   r�   r   Úforced_bos_token_idr   Úforced_eos_token_idr   r™   Úsuppress_tokensr   Úbegin_suppress_tokensÚforced_decoder_idsÚlenr   r   Úno_repeat_ngram_sizer   Ú_merge_criteria_processor_list)rC   ro   r�   r–   Ú
processorsÚbegin_indexÚirÔ   s           r)   r¾   z)FlaxGenerationMixin._get_logits_processoró  s%  € ô -Ó.ˆ
ð ×(Ñ(Ð4Ø!×.Ñ.Ð:Ø!×,Ñ,¨rÒ1à×ÑÜ,Ð->×-IÑ-IÐK\×KiÑKiÓjôð ×0Ñ0Ð<Ø×ÑÔ?Ð@Q×@eÑ@eÓfÔgØ×0Ñ0Ð<Ø×ÑÜ1Ð2C×2NÑ2NÐPa×PuÑPuÓvôð ×,Ñ,Ð8Ø×ÑÔ?Ð@Q×@aÑ@aÓbÔcØ×2Ñ2Ð>Ø.ˆKð )¨1Ò,Ð0A×0UÑ0UÐ0]ñ à  1‘_ð ð
 !×3Ñ3Ð?ÄCÐHY×HlÑHlÓDmÐpqÒDqàÐ0×CÑCÀBÑGÈÑJÑJ�Ø×ÑÜ8Ð9J×9`Ñ9`ÐbmÓnôð ×/Ñ/Ð;àAR×AeÑAeö"Ø<=Ð%¨¨!©Ñ,¨qÑ0°!°A±$Ò7ð"Ðð "ð ×ÑÔ<Ð=OÓPÔQØ×1Ñ1Ð=ÐBS×BhÑBhÐklÒBlØ×ÑÔ>Ð?P×?eÑ?eÓfÔgØ×8Ñ8¸ÐEUÓVˆ
àÐùò"s   ÆH Údefault_listÚcustom_listc                 óè   — t        |«      dk(  r|S |D ]K  }|D ]D  }t        |«      t        |«      u sŒd}t        d|› dt        |«      › d|› d|› d|› d|› d	|› d
�«      ‚ ŒM |j                  |«       |S )Nr   zlogits processorz	A custom z	 of type z with values zP has been passed to `generate`, but it has already been created with the values z. zŸ has been created by passing the corresponding arguments to generate or by the model's config default values. If you just want to change the default values of zL consider passing them as arguments to `generate` instead of using a custom ú.)rÕ   r�   rr   Úextend)rC   rÛ   rÜ   r}   ÚcustomÚobject_types         r)   r×   z2FlaxGenerationMixin._merge_criteria_processor_list'  s¿   € ô
 ˆ{Ó˜qÒ ØÐØ#ò 
	ˆGØ%ò 	�Ü˜“<¤4¨£=Ò0Ø"4�KÜ$Ø# K =°	¼$¸v»,¸À}ÐU[ÐT\ð ]XØX_ÐW`Ð`bÐcjÐbkð lUàU`ÐTað bVØVaÐUbÐbcð	eóð ñ	ð
	ð 	×Ñ˜KÔ(ØÐr(   r™   r±   r²   c	                 óÂ  ‡ ‡‡‡‡‡‡— ‰�‰n‰ j                   j                  Š‰�‰n‰ j                   j                  Š‰�‰n‰ j                   j                  Š|j                  \  }	}
t        j                  ‰‰�t
        j                  nd ¬«      Št        j                  ‰t
        j                  ¬«      Št        j                  |
«      }
t        j                  |	‰f‰t
        j                  ¬«      }t        j                  ||d«      }t        j                  |	ft
        j                  ¬«      }‰ j                  j                  r‰ j                  n‰ Š ‰ j                   |‰fi |¤Ž}t#        |
||||¬«      }ˆfd„}ˆˆˆˆˆˆ fd„}|j                  d   dkD  r ||«      }|s‰ j%                  |||«      }nt        j&                  |||«      }t)        |j*                  ¬«      S )Nrb   ©r   r   ©r2   r   r3   r4   r5   c                 ó’   •— | j                   ‰k(  }t        j                  | j                  «      }t        j                  ||«      }| S ©zstate termination condition fn.©r2   r$   Úallr4   Ú
logical_or©rK   Úhas_reached_max_lengthÚall_sequence_finishedÚfinish_generationr™   s       €r)   Úgreedy_search_cond_fnzAFlaxGenerationMixin._greedy_search.<locals>.greedy_search_cond_fnh  óC   ø€ à%*§]¡]°jÑ%@Ð"Ü$'§G¡G¨E×,BÑ,BÓ$CÐ!Ü #§¡Ð/EÐG\Ó ]ÐØ%Ð%Ð%r(   c                 ó  •—  ‰	| j                   fd‰i| j                  ¤Ž}|j                  dd…df   } ‰| j                  || j                  «      }t        j                  |d¬«      }|| j                   z  ‰
| j                  z  z   }| j                  |‰k(  z  }|dd…df   }t        j                  | j                  |d| j                  f«      }‰j                  || j                  «      }t        | j                  dz   ||||¬«      S )ústate update fn.rP   Nrd   re   r   r   rä   )r3   r5   rz   r   r2   r$   Úargmaxr4   r   Údynamic_update_sliceÚupdate_inputs_for_generationr1   )rK   Úmodel_outputsrz   Ú
next_tokenÚnext_is_sent_finishedÚnext_sequencesÚnext_model_kwargsr²   r–   Úmodelr±   rP   rC   s          €€€€€€r)   Úgreedy_search_body_fnzAFlaxGenerationMixin._greedy_search.<locals>.greedy_search_body_fno  s
  ø€ á! %×"5Ñ"5Ñ[¸fÐ[È×HZÑHZÑ[ˆMØ"×)Ñ)ª!¨R¨%Ñ0ˆFñ & e§o¡o°v¸u¿}¹}ÓMˆFäŸ™ F°Ô4ˆJà# u×'=Ñ'=Ð&=Ñ=ÀÈu×OeÑOeÑ@eÑeˆJØ$)×$:Ñ$:¸jÈLÑ>XÑ$YÐ!Ø#¢A t GÑ,ˆJä ×5Ñ5°e·o±oÀzÐTUÐW\×WdÑWdÐSeÓfˆNØ $× AÑ AÀ-ÐQV×QcÑQcÓ dÐÜØŸ™¨Ñ)Ø(Ø(Ø!6Ø.ôð r(   r   ©r   )ro   r™   r±   r²   ru   r$   ri   Úint32Úfullr   ró   ÚzerosÚbool_rq   r·   ÚdecoderF   r1   rL   Ú
while_loopr   r   )rC   rV   r™   r±   r²   r–   r•   rP   r5   r[   r2   r   r4   rK   rî   rû   rú   s   ` ```` `        @r)   rÀ   z"FlaxGenerationMixin._greedy_search<  s›  þ€ ð $.Ð#9‘Z¸t×?UÑ?U×?`Ñ?`ˆ
Ø'3Ð'?‘|ÀT×E[ÑE[×EhÑEhˆØ'3Ð'?‘|ÀT×E[ÑE[×EhÑEhˆà'Ÿo™oÑˆ
�Gä—y‘y À,ÐBZ´S·Y²YÐ`dÔeˆÜ—y‘y ´S·Y±YÔ?ˆÜ—)‘)˜GÓ$ˆô —H‘H˜j¨*Ð5°|Ì3Ï9É9ÔUˆ	Ü×,Ñ,¨Y¸	À6ÓJˆ	ô Ÿ9™9 j ]¼#¿)¹)ÔDÐð  $Ÿ{™{×=Ò=�—’À4ˆà9�t×9Ñ9¸)ÀZÑ`ÐS_Ñ`ˆô ØØØ#Ø-Ø%ô
ˆô	&÷	ñ 	ð2 �?‰?˜1Ñ Ò!Ù)¨%Ó0ˆEáØ×+Ñ+Ð,AÐCXÐZ_Ó`‰Eä—N‘NÐ#8Ð:OÐQVÓWˆEä%°·±Ô@Ð@r(   rž   c                 ó  ‡ ‡‡‡‡‡‡	‡— ‰�‰n‰ j                   j                  Š‰�‰n‰ j                   j                  Š‰�‰n‰ j                   j                  Š|�|nt        j
                  j                  d«      }|j                  \  }}t        j                  ‰‰�t        j                  nd ¬«      Št        j                  ‰t        j                  ¬«      Št        j                  |«      }t        j                  |‰f‰t        j                  ¬«      }t        j                  ||d«      }t        j                  |ft        j                  ¬«      }‰ j                   j"                  r‰ j$                  n‰ Š ‰ j&                  |‰fi |
¤Ž}
t)        ||||||
¬«      }ˆfd„}ˆˆˆˆˆˆ	ˆ fd„}|j                  d   dkD  r ||«      }|s‰ j+                  |||«      }nt        j,                  |||«      }t/        |j0                  ¬«      S )	Nr   rb   rã   )r2   r   r3   r4   r:   r5   c                 ó’   •— | j                   ‰k(  }t        j                  | j                  «      }t        j                  ||«      }| S ræ   rç   rê   s       €r)   Úsample_search_cond_fnz:FlaxGenerationMixin._sample.<locals>.sample_search_cond_fnÃ  rï   r(   c                 ó¬  •— t         j                  j                  | j                  «      \  }} ‰| j                  fd‰i| j
                  ¤Ž}|j                  dd…df   } ‰
| j                  || j                  «      } ‰||| j                  «      }t         j                  j                  ||d¬«      }|| j                   z  ‰| j                  z  z   }| j                  |‰	k(  z  }|dd…df   }t        j                  | j                  |d| j                  f«      }‰j                  || j
                  «      }t        | j                  dz   |||||¬«      S )rñ   rP   Nrd   re   r   r   )r2   r   r3   r4   r5   r:   )r®   r¯   Úsplitr:   r3   r5   rz   r   r2   Úcategoricalr4   r   ró   rô   r9   )rK   r:   Úprng_key_nextrõ   rz   rö   r÷   rø   rù   r²   r–   rž   rú   r±   rP   rC   s            €€€€€€€r)   Úsample_search_body_fnz:FlaxGenerationMixin._sample.<locals>.sample_search_body_fnÊ  sG  ø€ ä&)§j¡j×&6Ñ&6°u·~±~Ó&FÑ#ˆH�mÙ! %×"5Ñ"5Ñ[¸fÐ[È×HZÑHZÑ[ˆMà"×)Ñ)ª!¨R¨%Ñ0ˆFñ & e§o¡o°v¸u¿}¹}ÓMˆFá" 6¨6°5·=±=ÓAˆFäŸ™×/Ñ/°¸&ÀrÐ/ÓJˆJà# u×'=Ñ'=Ð&=Ñ=ÀÈu×OeÑOeÑ@eÑeˆJØ$)×$:Ñ$:¸jÈLÑ>XÑ$YÐ!Ø#¢A t GÑ,ˆJä ×5Ñ5°e·o±oÀzÐTUÐW\×WdÑWdÐSeÓfˆNØ $× AÑ AÀ-ÐQV×QcÑQcÓ dÐäØŸ™¨Ñ)Ø(Ø(Ø!6Ø.Ø&ôð r(   r   rü   )ro   r™   r±   r²   r®   r¯   r°   ru   r$   ri   rý   rþ   r   ró   rÿ   r   rq   r·   r  rF   r9   rL   r  r,   r   )rC   rV   r™   r±   r²   r:   r–   rž   r•   rP   r5   r[   r2   r   r4   rK   r  r
  rú   s   ` ``` `` `        @r)   rÂ   zFlaxGenerationMixin._sample’  s»  ÿ€ ð $.Ð#9‘Z¸t×?UÑ?U×?`Ñ?`ˆ
Ø'3Ð'?‘|ÀT×E[ÑE[×EhÑEhˆØ'3Ð'?‘|ÀT×E[ÑE[×EhÑEhˆØ'Ð3‘8¼¿¹×9KÑ9KÈAÓ9Nˆà'Ÿo™oÑˆ
�Gä—y‘y À,ÐBZ´S·Y²YÐ`dÔeˆÜ—y‘y ´S·Y±YÔ?ˆÜ—)‘)˜GÓ$ˆô —H‘H˜j¨*Ð5°|Ì3Ï9É9ÔUˆ	Ü×,Ñ,¨Y¸	À6ÓJˆ	ô Ÿ9™9 j ]¼#¿)¹)ÔDÐð  $Ÿ{™{×=Ò=�—’À4ˆð :�t×9Ñ9¸)ÀZÑ`ÐS_Ñ`ˆô ØØØ#Ø-ØØ%ô
ˆô	&÷	ò 	ð> �?‰?˜1Ñ Ò!Ù)¨%Ó0ˆEáØ×+Ñ+Ð,AÐCXÐZ_Ó`‰Eä—N‘NÐ#8Ð:OÐQVÓWˆEä¨%¯/©/Ô:Ð:r(   r¢   r£   r¤   c                 óº  ‡ ‡‡‡‡‡‡	‡‡‡‡‡‡‡— d„ Šd„ Šd„ Š‰�‰n‰ j                   j                  Š|�|n‰ j                   j                  }‰�‰n‰ j                   j                  Š‰�‰n‰ j                   j                  Š‰�‰n‰ j                   j
                  Š|
�|
n‰ j                   j                  }
|j                  \  ŠŠ}t        j                  ‰‰�t        j                  nd¬«      Št        j                  |t        j                  ¬«      }t        j                  |«      }|j                  d   Št        j                  ‰‰‰f|t        j                  ¬«      }t        j                  ‰‰‰f|t        j                  ¬«      }t        j                  ||d«      }t        j                  ‰‰ft        j                  ¬«      }t        j                   t        j                  dgt#        j                  d	«      g‰d
z
  z  z   «      ‰d
g«      }t        j$                  ‰‰f«      t#        j                  d	«      z  }‰ j&                  j(                  r‰ j*                  n‰ Šd|v r ‰|d   d   «      |d   d<   dD ]  }||v sŒ ‰||   «      ||<   Œ  ‰ j,                   ‰|«      ‰fi |¤Ž}t/        |||||||¬«      }ˆˆˆˆfd„}dˆˆˆˆˆˆˆˆˆˆˆ	ˆ ˆfd„	} t1        ||j                  d   ¬«      |«      }|s‰ j3                  |||«      }nt        j4                  |||«      }t        j6                  |j8                  d
¬«      }t        j:                  |dd…ddf   |j<                  |j>                  «      }t        j:                  |dd…df   |j@                  |jB                  «      } ‰|dd…d|
…dd…f   «      } ‰|dd…d|
…f   «      }tE        ||¬«      S )z£
        This beam search function is heavily inspired by Flax's official example:
        https://github.com/google/flax/blob/main/examples/wmt/decode.py
        c                 ó¢   — | j                   dk(  r| S | j                  | j                  d   | j                  d   z  f| j                  dd z   «      S )z8Flattens the first two dimensions of a non-scalar array.r   r   r	   N©Úndimrj   ru   )rv   s    r)   Úflatten_beam_dimz:FlaxGenerationMixin._beam_search.<locals>.flatten_beam_dim  sN   € ð �{‰{˜aÒØ�Ø—>‘> 6§<¡<°¡?°V·\±\À!±_Ñ#DÐ"FÈÏÉÐVWÐVXÐIYÑ"YÓZÐZr(   c                 ój   — | j                   dk(  r| S | j                  ||f| j                  dd z   «      S )zFUnflattens the first, flat batch*beam dimension of a non-scalar array.r   r   Nr  )rv   r[   rw   s      r)   Úunflatten_beam_dimz<FlaxGenerationMixin._beam_search.<locals>.unflatten_beam_dim  s9   € ð �{‰{˜aÒØ�Ø—>‘> :¨yÐ"9¸F¿L¹LÈÈÐ<LÑ"LÓMÐMr(   c                 ó´   ‡‡— t        j                  t        j                  ||z  «      |z  ||f«      Šˆˆfd„}t        j                  j                  || «      S )z^
            Gathers the beam slices indexed by beam_indices into new beam array.
            c                 ó4   •— | j                   dk(  r| S | ‰‰f   S )Nr   )r  )rv   Úbatch_indicesÚbeam_indicess    €€r)   Ú	gather_fnzIFlaxGenerationMixin._beam_search.<locals>.gather_beams.<locals>.gather_fn  s$   ø€ à—;‘; !Ò#Ø!�Mà! -°Ð"=Ñ>Ð>r(   )r$   rj   Úaranger®   Ú	tree_utilÚtree_map)Únestedr  r[   Únew_num_beamsr  r  s    `   @r)   Úgather_beamsz6FlaxGenerationMixin._beam_search.<locals>.gather_beams  sO   ù€ ô  ŸK™KÜ—
‘
˜:¨Ñ5Ó6¸-ÑGÈ*ÐVcÐIdóˆMõ?ô —=‘=×)Ñ)¨)°VÓ<Ð<r(   Nrb   rd   )r   r   r   ç        ç    ÐcÁr   rR   rŸ   r    )r2   r=   r>   r   r/   r4   r5   c                 óö  •— | j                   ‰	k  }‰dk(  r$‰dkD  r| j                  dd…dd…f   ‰	‰z
  ‰z  z  }n(| j                  dd…dd…f   | j                   ‰z
  ‰z  z  }t        j                  | j                  t        j
                  | j                  dd¬«      t        j                  d«      «      }t        j                  ||kD  «      }t        j                  | j                  «      ‰du z   }||z  |z  S )z+beam search state termination condition fn.Úneverr  Nr   T©rf   Úkeepdimsr  )r2   r>   r$   Úwherer4   r¼   r/   Únpri   Úanyrè   )
rK   Únot_max_length_yetÚbest_running_scoreÚworst_finished_scoreÚimprovement_still_possibleÚstill_open_beamÚdecoder_prompt_lenr£   r¢   r™   s
         €€€€r)   Úbeam_search_cond_fnz=FlaxGenerationMixin._beam_search.<locals>.beam_search_cond_fn_  s  ø€ ð "'§¡°Ñ!;Ðð  Ò(¨^¸cÒ-AØ%*×%9Ñ%9º!¸R¸a¸R¸%Ñ%@ØÐ"4Ñ4¸ÑGñ&Ñ"ð &+×%9Ñ%9º!¸R¸a¸R¸%Ñ%@Ø—]‘]Ð%7Ñ7¸NÑJñ&Ð"ô $'§9¡9Ø×&Ñ&¬¯©°·±À1ÈtÔ(TÔVX×V^ÑV^Ð_eÓVfó$Ð ô *-¯©Ð1CÐFZÑ1ZÓ)[Ð&ô !$§¡¨×(>Ñ(>Ó ?À>ÐUYÐCYÑ ZÐ[ˆOà%¨Ñ7Ð:TÑTÐTr(   c           	      óD  •—  ‰$t        j                  | j                  dd| j                  |z
  f‰ ‰)|f«      «      } ‰(|fd‰*i| j                  ¤Ž} ‰,|j
                  dd…df   ‰ ‰)«      }t        j                  j                  ˆ ˆ)ˆ,fd„|j                  «      }‰+j                  |«      }t        j                  j                  |«      } ‰' ‰$| j                  «       ‰$|«      | j                  «      } ‰,|‰ ‰)«      }|t        j                  | j                  d¬«      z   }|j                   d   }|j#                  ‰ ‰)|z  f«      }d‰)z  }t        j$                  ||¬«      \  }	}
|
|z  } ‰%| j                  |‰ |«      }t        j                  |
|z  d¬«      }t        j&                  ||dd| j                  f«      }|dd…dd…| j                  f   ‰#k(  }|	|t)        j*                  d	«      z  z   }t        j$                  |‰)¬«      d
   } ‰%||g|‰ ‰)«      \  }}|	| j                  d
z   ‰!z
  ‰&z  z  }	t        j,                  | j.                  j1                  dd¬«      |j                   «      ‰"du z  }| |z  }|	|t)        j*                  d	«      z  z  }	t        j2                  | j4                  |gd
¬«      }t        j2                  | j6                  |	gd
¬«      }t        j2                  | j.                  |gd
¬«      }t        j$                  |‰)¬«      d
   } ‰%|||g|‰ ‰)«      \  }}} ‰%||‰ ‰)«      } ‰%||‰ ‰)«      }t        j                  j                  ˆ$fd„|«      |d<   ‰+j9                  || j                  «      }t;        | j                  d
z   ||||||¬«      S )zbeam search state update fn.r   rP   Nrd   c                 ó   •—  ‰| ‰‰«      S ©Nr'   )rv   r[   rw   r  s    €€€r)   ú<lambda>zOFlaxGenerationMixin._beam_search.<locals>.beam_search_body_fn.<locals>.<lambda>�  s   ø€ Ñ1°&¸*ÀiÓP€ r(   r	   re   )Úkr  r   Tr!  c                 ó   •—  ‰| «      S r/  r'   )Úxr  s    €r)   r0  zOFlaxGenerationMixin._beam_search.<locals>.beam_search_body_fn.<locals>.<lambda>ä  s   ø€ ÑP`ÐabÓPc€ r(   Úpast_key_values)r2   r>   r=   r/   r   r4   r5   )r   Údynamic_slicer=   r2   r5   rz   r®   r  r  r4  r{   ÚnnÚlog_softmaxr$   Úexpand_dimsr>   ru   rj   rÊ   ró   r$  ri   rt   r4   rè   Úconcatenater   r/   rô   r<   )-rK   Úinput_ids_lengthÚinput_tokenrõ   rz   ÚcacheÚ	log_probsÚ
vocab_sizeÚbeams_to_keepÚtopk_log_probsÚtopk_indicesÚtopk_beam_indicesÚtopk_running_sequencesÚtopk_idsÚtopk_sequencesÚdid_topk_just_finishedÚrunning_topk_log_probsÚnext_topk_indicesÚnext_running_sequencesÚnext_running_scoresÚbeams_in_batch_are_fullÚadd_penaltyÚmerged_sequencesÚmerged_scoresÚmerged_is_sent_finishedÚtopk_merged_indicesrø   Únext_scoresr÷   Únext_running_indicesÚ
next_cacherù   r[   r+  r£   r²   r  r  r¢   r–   rú   rw   rP   rC   r  s-                                   €€€€€€€€€€€€€r)   Úbeam_search_body_fnz=FlaxGenerationMixin._beam_search.<locals>.beam_search_body_fn}  sÞ  ø€ ñ +Ü×!Ñ!Ø×+Ñ+Ø˜˜5Ÿ=™=Ð+;Ñ;Ð<Ø Ð,<Ð=óóˆKñ " +ÑS°fÐSÀ×@RÑ@RÑSˆMá'¨×(<Ñ(<ºQÀ¸UÑ(CÀZÐQZÓ[ˆFÜ—M‘M×*Ñ*ÝPÐR_×RoÑRoóˆEð
 ×7Ñ7¸Ó?ˆFô Ÿ™×*Ñ*¨6Ó2ˆIÙ(Ù  ×!8Ñ!8Ó9Ñ;KÈIÓ;VÐX]×XeÑXeóˆIñ +¨9°jÀ)ÓLˆIØ!¤C§O¡O°E×4HÑ4HÈqÔ$QÑQˆIØ"Ÿ™¨Ñ+ˆJØ!×)Ñ)¨:°yÀ:Ñ7MÐ*NÓOˆIð  	™MˆMÜ+.¯9©9°YÀ-Ô+PÑ(ˆN˜LØ ,°
Ñ :ÐÙ%1Ø×'Ñ'Ð):¸JÈó&Ð"ô —‘ |°jÑ'@ÀqÔIˆHÜ ×5Ñ5Ð6LÈhÐYZÐ\]Ð_d×_lÑ_lÐXmÓnˆNð &4²A²q¸%¿-¹-Ð4GÑ%HÈLÑ%XÐ"Ø%3Ð6LÌrÏxÉxÐX^ÓO_Ñ6_Ñ%_Ð"ô !$§	¡	Ð*@ÀIÔ NÈqÑ QÐÙ:FØÐ!7Ð8Ð:KÈZÐYbó;Ñ7Ð"Ð$7ð ,°·±ÀÑ0AÐDVÑ0VÐ[iÑ/iÑjˆNÜ&)×&6Ñ&6Ø×&Ñ&×*Ñ*°¸TÐ*ÓBÐDZ×D`ÑD`ó'à 4Ð'ñ')Ð#ð 2Ð1Ð4KÑKˆKØ˜k¬B¯H©H°VÓ,<Ñ<Ñ<ˆNô  #Ÿ™°·±ÀÐ/PÐWXÔYÐÜŸO™O¨U¯\©\¸>Ð,JÐQRÔSˆMÜ&)§o¡o°u×7MÑ7MÐOeÐ6fÐmnÔ&oÐ#Ü"%§)¡)¨M¸YÔ"GÈÑ"JÐÙAMØ! =Ð2IÐJÐL_ÐakÐmvóBÑ>ˆN˜KÐ)>ñ $0Ð0AÐCTÐV`ÐbkÓ#lÐ Ù% eÐ-AÀ:ÈyÓYˆJÜ/2¯}©}×/EÑ/EÓFcÐeoÓ/pˆMÐ+Ñ,Ø $× AÑ AÀ-ÐQV×QcÑQcÓ dÐä"ØŸ™¨Ñ)Ø2Ø"8Ø"Ø(Ø!6Ø.ôð r(   )r:  re   )r   r/   )r   )#ro   r™   r±   r²   r¢   r£   r¤   ru   r$   ri   rý   rþ   r   ró   rÿ   r   Útiler$  Úonesrq   r·   r  rF   r<   r   rL   r  r%  r4   r#  r   r=   r/   r>   r.   )rC   rV   r™   r±   r²   r¢   r£   r–   r•   rP   r¤   r5   r2   r   r=   r4   r>   r/   rÇ   rK   r,  rT  Únone_finishedr[   r+  r  r  rú   rw   r  s   ` ` ```` `             @@@@@@@r)   rÃ   z FlaxGenerationMixin._beam_searchó  s°  ÿý€ ò&	[ò	Nò	=ð$ $.Ð#9‘Z¸t×?UÑ?U×?`Ñ?`ˆ
Ø'3Ð'?‘|ÀT×E[ÑE[×EhÑEhˆØ'3Ð'?‘|ÀT×E[ÑE[×EhÑEhˆØ+9Ð+E™È4×KaÑKa×KpÑKpˆØ+9Ð+E™È4×KaÑKa×KpÑKpˆà$8Ð$DÑ È$×J`ÑJ`×JuÑJuð 	ð *3¯©Ñ&ˆ
�I˜wä—y‘y À,ÐBZ´S·Y²YÐ`dÔeˆÜ—y‘y ´S·Y±YÔ?ˆÜ—)‘)˜GÓ$ˆð 'Ÿ_™_¨RÑ0Ðô —H‘H˜j¨)°ZÐ@À,ÔVY×V_ÑV_Ô`ˆ	ÜŸH™H j°)¸ZÐ%HÈ,Ô^a×^gÑ^gÔhÐÜ×4Ñ4°YÀ	È9ÓUÐô Ÿ9™9 j°)Ð%<ÄCÇIÁIÔNÐô Ÿ™¤#§)¡)¨S¨E´R·X±X¸fÓ5EÐ4FÈ)ÐVWÉ-Ñ4XÑ,XÓ"YÐ\fÐhiÐ[jÓkˆÜ—‘˜: yÐ1Ó2´R·X±X¸fÓ5EÑEˆð  $Ÿ{™{×=Ò=�—’À4ˆð  Ñ,ÙCSØÐ.Ñ/Ð0CÑDóDˆLÐ*Ñ+Ð,?Ñ@ð Bò 	LˆEØ˜Ò$Ù&6°|ÀEÑ7JÓ&K�˜UÒ#ð	Lð
 :�t×9Ñ9Ñ:JÈ9Ó:UÐWaÑrÐeqÑrˆô  ØØ/Ø)ØØØ-Ø%ô
ˆ÷	U÷<r	÷ r	ñ r	ðn S”Ð+¸i¿o¹oÈbÑ>QÔRÐSXÓYˆáØ×+Ñ+Ð,?ÐATÐV[Ó\‰Eä—N‘NÐ#6Ð8KÈUÓSˆEô Ÿ™ × 6Ñ 6¸QÔ?ˆÜ—I‘I˜mªA¨t°T¨MÑ:¸E¿O¹OÈU×MdÑMdÓeˆ	Ü—‘˜=ª¨D¨Ñ1°5·<±<À×AUÑAUÓVˆñ % YªqÐ2GÐ3GÐ2GÊÐ/JÑ%KÓLˆ	Ù! &ªÐ,AÐ-AÐ,AÐ)AÑ"BÓCˆä#¨iÀÔGÐGr(   )NNN)NN)NNTNN)NNNNTNN)	NNNNNNTNN)
NNNNNNTNNN)!r    r!   r"   r#   rF   ÚstaticmethodrL   rZ   Úintr   r   r7   r$   r%   rl   rh   rx   r{   rŠ   r   r”   r   Úboolr   rÈ   rÁ   r¾   r×   rÀ   rÂ   Úfloatr   rÃ   r'   r(   r)   r@   r@   ‚   sa  „ ñò 
ð
 ñó ðòð 15Ø&*Ø9=ñgàðgð !)¨¡ðgð ˜s‘mð	gð
 ˜t C¨¯©Ð$4Ñ5Ñ6ðgð 
�‰ógð  [_ñ
Ø&.¨s¡mð
ØJRÐSVÉ-ð
à	ó
ð> ñbó ðbòò/ð0°4¸¸S¸±>ó ð* 9=Ø*.ØØ37Ø>BñSVà—;‘;ðSVð $Ð$4Ñ5ðSVð ˜3Ÿ;™;Ñ'ð	SVð
 ðSVð ˜˜c 3§;¡;Ð.Ñ/Ñ0ðSVð #Ð#:Ñ;óSVðjÐ4Dð ÐI`ó ð 2à+ð2ð "ð2ð #Ð#:Ñ;ð	2ð
 
!ó2ðhà-ðð -ðð 
!ó	ð0 %)Ø&*Ø&*Ø>BØØ37Ø9=ñTAàðTAð ˜S‘MðTAð ˜s‘mð	TAð
 ˜s‘mðTAð #Ð#:Ñ;ðTAð ðTAð ˜˜c 3§;¡;Ð.Ñ/Ñ0ðTAð ˜t C¨¯©Ð$4Ñ5Ñ6óTAðr %)Ø&*Ø&*Ø*.Ø>BØ;?ØØ37Ø9=ñ_;àð_;ð ˜S‘Mð_;ð ˜s‘mð	_;ð
 ˜s‘mð_;ð ˜3Ÿ;™;Ñ'ð_;ð #Ð#:Ñ;ð_;ð  Ð 7Ñ8ð_;ð ð_;ð ˜˜c 3§;¡;Ð.Ñ/Ñ0ð_;ð ˜t C¨¯©Ð$4Ñ5Ñ6ó_;ðH %)Ø&*Ø&*Ø*.Ø59Ø>BØØ37Ø.2Ø9=ñRHàðRHð ˜S‘MðRHð ˜s‘mð	RHð
 ˜s‘mðRHð ! ™ðRHð !  t¨S yÑ!1Ñ2ðRHð #Ð#:Ñ;ðRHð ðRHð ˜˜c 3§;¡;Ð.Ñ/Ñ0ðRHð ' s™mðRHð ˜t C¨¯©Ð$4Ñ5Ñ6ôRHr(   r@   )2r«   rŒ   r©   Ú	functoolsr   Útypingr   r   r   r   Úflaxr®   Ú	jax.numpyÚnumpyr$   r$  r   Úmodels.autor
   r   r   Úutilsr   r   Úconfiguration_utilsr   Úflax_logits_processr   r   r   r   r   r   r   r   r   r   r   Ú
get_loggerr    r³   ÚstructÚ	dataclassr   r,   r.   r1   r9   r<   r@   r'   r(   r)   ú<module>rh     sH  ðó$ Û Û Ý ß -Ó -ã Û 
Ý Û Ý ÷ñ ÷
 )Ý 1÷÷ ÷ ñ ð 
ˆ×	Ñ	˜HÓ	%€ð ‡�×Ñô
,˜[ó 
,ó ð
,ð ‡�×Ñô
,�{ó 
,ó ð
,ð ‡�×Ñô)˜;ó )ó ð)ð  ‡�×Ñ÷)ð )ó ð)ð ‡�×Ñ÷)ð )ó ð)ð ‡�×Ñ÷)ð )ó ð)÷CHò CHr(   