ó
    >:j¸c  ã                  ó  • S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJ	r	J
r
  S SKrS SKrS SKJr  S SKJrJr  S SKJr  S S	KJr  S S
KJrJr  S SKJrJrJrJr  S SKJr  S SKJr  S SK J!r!  S SK"J#r#  S SK$J%r%  S SK&J'r'  S SK(J)r)  S SK*J+r+  S SK,J-r-  \-" 5       (       a  S SK.J/r/  \	(       a  S SK0J1r1  S SK2J+r+  \Rf                  " \45      r5 " S S\5      r6 " S S\5      r7 " S S\5      r8 " S S\Rr                  5      r: " S S 5      r;g)!é    )ÚannotationsN)ÚCallable)ÚPath)ÚTYPE_CHECKINGÚAny)Úversion)ÚTensorÚnn)Ú	Optimizer)Ú
DataLoader)ÚtqdmÚtrange)ÚTrainerCallbackÚTrainerControlÚTrainerStateÚis_torch_npu_available)ÚBatchEncoding)ÚBaseEvaluator)ÚBatchSamplers)ÚCrossEncoderTrainingArguments)ÚNoDuplicatesDataLoader)ÚSentenceLabelDataset)ÚSentenceTransformer)ÚInputExample)Úis_datasets_available)ÚDataset)ÚCrossEncoderc                  ó\   ^ • \ rS rSrSrSU 4S jjrSS jr            S	S jrSrU =r	$ )
ÚSaveModelCallbacké'   a[  A Callback to save the model to the `output_dir`.

If save_best_model is True and evaluator is defined, then we save on evaluate, but only if the new model is
better than the currently saved one according to the evaluator.

This differs from the `SaveModelCallback` used in SentenceTransformer.fit where the model is saved after
training as well.
c                óT   >• [         TU ]  5         Xl        X l        X0l        S U l        g ©N)ÚsuperÚ__init__Ú
output_dirÚ	evaluatorÚsave_best_modelÚbest_metric)Úselfr%   r&   r'   Ú	__class__s       €Új/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sentence_transformers/cross_encoder/fit_mixin.pyr$   ÚSaveModelCallback.__init__1   s&   ø€ Ü‰ÑÔØ$ŒØ"ŒØ.ÔØˆÕó    c                ór   • [        U R                  SS5      (       a  XR                  :„  $ XR                  :  $ )NÚgreater_is_betterT)Úgetattrr&   r(   )r)   Ú
new_metrics     r+   Ú	is_betterÚSaveModelCallback.is_better8   s4   € Ü�4—>‘>Ð#6¸×=Ñ=Ø× 0Ñ 0Ñ0Ð0Ø×,Ñ,Ñ,Ð,r-   c                ó`  • U R                   b¡  U R                  (       a�  [        U R                   SS5      nUR                  5        Hc  u  p‰UR	                  U5      (       d  M  U R
                  b  U R                  U	5      (       d  MB  X�l        UR                  U R                  5        Me     g g g ©NÚprimary_metricr&   )	r&   r'   r0   ÚitemsÚendswithr(   r2   Úsaver%   )
r)   ÚargsÚstateÚcontrolÚmetricsÚmodelÚkwargsÚ
metric_keyÚkeyÚvalues
             r+   Úon_evaluateÚSaveModelCallback.on_evaluate=   s‚   € ð �>‰>Ñ%¨$×*>×*>Ü  §¡Ð1AÀ;ÓOˆJØ%Ÿm™mžo‘
�Ø—<‘< 
×+Ó+Ø×'Ñ'Ñ/°4·>±>À%×3HÓ3HØ+0Ô(ØŸ
™
 4§?¡?Ö3ò	 .ð +?Ð%r-   )r(   r&   r%   r'   )r%   Ústrr&   úBaseEvaluator | Noner'   ÚboolÚreturnÚNone)r1   ÚfloatrH   rG   )r:   r   r;   r   r<   r   r=   údict[str, Any]r>   r   rH   rI   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r$   r2   rC   Ú__static_attributes__Ú__classcell__©r*   s   @r+   r   r   '   sV   ø† ñ÷ ô-ð
4à+ð4ð ð4ð  ð	4ð
  ð4ð ð4ð 
÷4ò 4r-   r   c                  óR   ^ • \ rS rSrSrSSU 4S jjjr          SS jrSrU =r$ )	ÚEvaluatorCallbackéO   zÚThe CrossEncoder.fit method always ran the evaluator on every epoch,
in addition to every "evaluation_steps". This callback is responsible for that.

The `.trainer` must be provided after the trainer has been created.
c                ó  >• [         TU ]  5         Xl        X l        U R                  bN  [        R
                  R                  U R                  S5      U l        [        R                  " U R                  SS9  SU l        S U l	        g )NÚevalT©Úexist_ok)
r#   r$   r&   Úoutput_pathÚosÚpathÚjoinÚmakedirsÚmetric_key_prefixÚtrainer)r)   r&   r[   r*   s      €r+   r$   ÚEvaluatorCallback.__init__V   se   ø€ Ü‰ÑÔØ"ŒØ&ÔØ×ÑÑ'Ü!Ÿw™wŸ|™|¨D×,<Ñ,<¸fÓEˆDÔÜ�KŠK˜×(Ñ(°4Ò8à!'ˆÔØˆ�r-   c                óÆ  • U R                  X@R                  UR                  UR                  S9n[	        U[
        5      (       d  SU0n[        UR                  5       5       HJ  nUR                  U R                   S35      (       a  M(  UR                  U5      X`R                   SU 3'   ML     U R                  b%  U R                  R                  R                  XX6S9  g g )N©r[   ÚepochÚstepsr&   Ú_)r=   )r&   r[   re   Úglobal_stepÚ
isinstanceÚdictÚlistÚkeysÚ
startswithr`   Úpopra   Úcallback_handlerrC   )r)   r:   r;   r<   r>   r?   Úevaluator_metricsrA   s           r+   Úon_epoch_endÚEvaluatorCallback.on_epoch_enda   sØ   € ð !ŸN™NØ×/Ñ/°u·{±{È%×J[ÑJ[ð +ð 
Ðô Ð+¬T×2Ñ2Ø!,Ð.?Ð @Ðô Ð)×.Ñ.Ó0Ö1ˆCØ—>‘> T×%;Ñ%;Ð$<¸AÐ">×?Ó?ØGX×G\ÑG\Ð]`ÓGaÐ!×%;Ñ%;Ð$<¸A¸c¸UÐ"CÓDñ 2ð �<‰<Ñ#Ø�L‰L×)Ñ)×5Ñ5°dÀ7Ð5Òfð $r-   )r&   r`   r[   ra   r"   )r&   r   r[   ú
str | NonerH   rI   )
r:   r   r;   r   r<   r   r>   r   rH   rI   )	rL   rM   rN   rO   rP   r$   rq   rQ   rR   rS   s   @r+   rU   rU   O   sS   ø† ñ÷	ñ 	ðgà+ðgð ðgð  ð	gð
 ðgð 
÷gò gr-   rU   c                  óN   ^ • \ rS rSrSrSU 4S jjr          SS jrSrU =r$ )ÚOriginalCallbackéx   z¹A Callback to invoke the original callback function that was provided to CrossEncoder.fit()

This callback has the following signature: `(score: float, epoch: int, steps: int) -> None`
c                ó:   >• [         TU ]  5         Xl        X l        g r"   )r#   r$   Úcallbackr&   )r)   rx   r&   r*   s      €r+   r$   ÚOriginalCallback.__init__~   s   ø€ Ü‰ÑÔØ ŒØ"�r-   c                óà   • [        U R                  SS5      nUR                  5        HC  u  pxUR                  U5      (       d  M  U R	                  X‚R
                  UR                  5      s  $    g r5   )r0   r&   r7   r8   rx   re   rh   )	r)   r:   r;   r<   r=   r?   r@   rA   rB   s	            r+   rC   ÚOriginalCallback.on_evaluateƒ   sS   € ô ˜TŸ^™^Ð-=¸{ÓKˆ
Ø!Ÿ-™-ž/‰JˆCØ�|‰|˜J×'Ó'Ø—}‘} U¯K©K¸×9JÑ9JÓKÒKò *r-   )rx   r&   )rx   ú!Callable[[float, int, int], None]r&   r   rH   rI   )
r:   r   r;   r   r<   r   r=   rK   rH   rI   )	rL   rM   rN   rO   rP   r$   rC   rQ   rR   rS   s   @r+   ru   ru   x   sN   ø† ñ÷
#ð
Là+ðLð ðLð  ð	Lð
  ðLð 
÷Lò Lr-   ru   c                  ó^   ^ • \ rS rSrSr\R                  " 5       4SU 4S jjjrSS jrSr	U =r
$ )ÚFitMixinLossé‘   znA wrapper around the torch loss function that just accepts logits and labels, to be used in CrossEncoder.fit()c                óF   >• [         TU ]  5         Xl        X l        X0l        g r"   )r#   r$   r>   Úloss_fctÚactivation_fn)r)   r>   r�   r‚   r*   s       €r+   r$   ÚFitMixinLoss.__init__”   s   ø€ Ü‰ÑÔØŒ
Ø ŒØ*Õr-   c                ó&  • [        U5      S:w  a  [        S[        U5       S35      e[        [        US   US   5      5      nU R                  R                  USSSS9nUR                  U R                  R                  5        U R                  " S
0 UD6S   nU R                  R                  R                  S:X  a"  UR                  S	5      nUR                  5       nOUR                  5       nU R                  U5      nU R                  XR5      nU$ )Né   z\BinaryCrossEntropyLoss expects a dataset with two non-label columns, but got a dataset with z	 columns.r   é   TÚpt©ÚpaddingÚ
truncationÚreturn_tensorséÿÿÿÿ© )ÚlenÚ
ValueErrorrk   Úzipr>   Ú	tokenizerÚtoÚdeviceÚconfigÚ
num_labelsÚviewrJ   Úlongr‚   r�   )r)   ÚinputsÚlabelsÚpairsÚtokensÚlogitsÚlosss          r+   ÚforwardÚFitMixinLoss.forwardš   s  € Üˆv‹;˜!ÓÜØnÔorÐsyÓozÐn{ð  |Eð  Fóð ô ”S˜ ™ F¨1¡IÓ.Ó/ˆØ—‘×%Ñ%ØØØØð	 &ð 
ˆð 	�	‰	�$—*‘*×#Ñ#Ô$Ø—’Ñ%˜fÑ% aÑ(ˆØ�:‰:×Ñ×'Ñ'¨1Ó,Ø—[‘[ “_ˆFØ—\‘\“^‰Fà—[‘[“]ˆFØ×#Ñ# FÓ+ˆØ�}‰}˜VÓ,ˆØˆr-   )r‚   r�   r>   )r>   r   r�   ú	nn.Moduler‚   r    rH   rI   )r˜   zlist[list[str]]r™   r	   rH   r	   )rL   rM   rN   rO   rP   r
   ÚIdentityr$   rž   rQ   rR   rS   s   @r+   r~   r~   ‘   s&   ø† Ùxà\^×\gÒ\gÓ\i÷ +ñ +÷ò r-   r~   c                  ó¦  • \ rS rSrSrSSS\R                  " 5       SS\R                  R                  SS0S	S
SSSSSS4                                 SS jjr
SS jrSS jrSSS\R                  " 5       SS\R                  R                  SS0S	S
SSSSSS4                               SS jjrSS jrSrg)ÚFitMixiné³   zUMixin class for injecting the `fit` and `old_fit` methods into the CrossEncoder classNr†   ÚWarmupLineari'  Úlrgñhãˆµøô>g{®Gáz„?r   TFc                ó8  ^'• [        5       (       d  [        S5      eSSKJn  SSKJn  SSKJn  S nUUl        [        USS5      n[        U[        5      (       a  [        R                  nOQ[        US	5      (       a0  [        UR                  [         5      (       a  [        R"                  nO[        R$                  n/ n/ nU H?  n['        U Vs/ s H  nUR(                  UR*                  4PM     sn6 u  nnUU-  nUU-  nMA     [,        R.                  " [1        ['        U6 5       VVs0 s H  u  nnS
U 3U_M     snn5      n Sn! [3        U5      S1:X  a  Sn!U!(       a  U R7                  SU5      n S!S jn"[8        R:                  " [<        R>                  5      [8        R:                  " S5      :¼  a  SOSn#[A        S"U"" 5       UUUUS.U#Ub  US:”  a  SOS0DUUUU(       + SS.D6n$[C        U RE                  5       5      n%/ SQn&U% V'^'V(s/ s H$  u  m'n([G        U'4S jU& 5       5      (       a  M"  U(PM&     sn(n'U
S.U% V'^'V(s/ s H$  u  m'n([G        U'4S jU& 5       5      (       d  M"  U(PM&     sn(n'SS./n)U" U)40 U	D6n*[        U[H        5      (       a2  [K        U 5      U-  n+[M        U+U-  5      n,[N        RP                  " U*XgU,S9n-Uc(  U RR                  RT                  S:X  a  U" XS9nOU" XS9nO
[W        XUS9n/ n.Ub8  U.RY                  [[        X,5      5        Ub  U.RY                  []        UU5      5        U" U U$U SUUU*W-4U.S 9n/Ub  U/R_                  [a        XÂU5      5        U/Rc                  5         gs  snf s  snnf ! [4         a     GN3f = fs  sn(n'f s  sn(n'f )#a 
  
Deprecated training method from before Sentence Transformers v4.0, it is recommended to use
:class:`~sentence_transformers.sentence_transformer.trainer.CrossEncoderTrainer` instead. This method uses
:class:`~sentence_transformers.sentence_transformer.trainer.CrossEncoderTrainer` behind the scenes, but does
not provide as much flexibility as the Trainer itself.

This training approach uses a DataLoader and Loss function to train the model.

This method should produce equivalent results in v4.0 as before v4.0, but if you encounter any issues
with your existing training scripts, then you may wish to use
:meth:`CrossEncoder.old_fit <sentence_transformers.cross_encoder.model.CrossEncoder.old_fit>` instead.
That uses the old training method from before v4.0.

Args:
    train_dataloader: The DataLoader with InputExample instances
    evaluator: An evaluator (sentence_transformers.cross_encoder.evaluation)
        evaluates the model performance during training on held-
        out dev data. It is used to determine the best model
        that is saved to disk.
    epochs: Number of epochs for training
    loss_fct: Which loss function to use for training. If None,
        will use BinaryCrossEntropy() if self.config.num_labels == 1
        else CrossEntropyLoss(). Defaults to None.
    activation_fct: Activation function applied on top of logits
        output of model.
    scheduler: Learning rate scheduler. Available schedulers:
        constantlr, warmupconstant, warmuplinear, warmupcosine,
        warmupcosinewithhardrestarts
    warmup_steps: Behavior depends on the scheduler. For
        WarmupLinear (default), the learning rate is increased
        from o up to the maximal learning rate. After these many
        training steps, the learning rate is decreased linearly
        back to zero.
    optimizer_class: Optimizer
    optimizer_params: Optimizer parameters
    weight_decay: Weight decay for model parameters
    evaluation_steps: If > 0, evaluate the model using evaluator
        after each number of training steps
    output_path: Storage path for the model and evaluation files
    save_best_model: If true, the best model (according to
        evaluator) is stored at output_path
    max_grad_norm: Used for gradient normalization.
    use_amp: Use Automatic Mixed Precision (AMP). Only for
        Pytorch >= 1.6.0
    callback: Callback function that is invoked after each
        evaluation. It must accept the following three
        parameters in this order: `score`, `epoch`, `steps`
    show_progress_bar: If True, output a tqdm progress bar
zGPlease install `datasets` to use this function: `pip install datasets`.r   )ÚBinaryCrossEntropyLoss)ÚCrossEntropyLoss)ÚCrossEncoderTrainerc                ó   • U $ r"   r�   )Úbatchs    r+   ÚidentityÚFitMixin.fit.<locals>.identity  s   € ØˆLr-   Ú
batch_sizeé   ÚdatasetÚ	sentence_TFÚlabelc                 óZ  • Sn Sn[        U 5      R                  5       (       aˆ  [        [        [        U 5      R	                  5       5      5      S:w  aY  SU 3n US-  n[        U 5      R                  5       (       a1  [        [        [        U 5      R	                  5       5      5      S:w  a  MY  U $ )Nzcheckpoints/modelr†   r   zcheckpoints/model_)r   ÚexistsrŽ   rk   Úiterdir)Údir_nameÚidxs     r+   Ú_default_checkpoint_dirÚ-FitMixin.fit.<locals>._default_checkpoint_dir"  sŽ   € Ø*ˆHØˆCÜ�x“.×'Ñ'×)Ñ)¬c´$´t¸H³~×7MÑ7MÓ7OÓ2PÓ.QÐUVÓ.VØ/°¨uÐ5�Ø�q‘�ô �x“.×'Ñ'×)Ñ)¬c´$´t¸H³~×7MÑ7MÓ7OÓ2PÓ.QÐUVÕ.Vð ˆOr-   z4.41.0Úeval_strategyÚevaluation_strategy)r%   Úbatch_samplerÚper_device_train_batch_sizeÚper_device_eval_batch_sizeÚnum_train_epochsNrf   Úno)Ú
eval_stepsÚmax_grad_normÚfp16Údisable_tqdmÚsave_strategy©ÚbiaszLayerNorm.biaszLayerNorm.weightc              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr"   r�   ©Ú.0ÚndÚns     €r+   Ú	<genexpr>ÚFitMixin.fit.<locals>.<genexpr>F  ó   øé € ÐC_ÒV^ÐPRÈ!ÆGÒV^ùó   ƒ©ÚparamsÚweight_decayc              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr"   r�   rÊ   s     €r+   rÎ   rÏ   I  ó   øé € Ð<XÊxÈÀ1¾WÊxùrÑ   ç        ©Ú	schedulerÚwarmup_stepsÚt_totalr†   )r‚   )r�   r‚   )r>   r:   Útrain_datasetÚeval_datasetr�   r&   Ú
optimizersÚ	callbacks)rH   rE   r�   )2r   ÚImportErrorÚ?sentence_transformers.cross_encoder.losses.binary_cross_entropyr¨   Ú8sentence_transformers.cross_encoder.losses.cross_entropyr©   Ú+sentence_transformers.cross_encoder.trainerrª   Ú
collate_fnr0   ri   r   r   ÚNO_DUPLICATESÚhasattrr±   r   ÚGROUP_BY_LABELÚBATCH_SAMPLERr�   Útextsr³   r   Ú	from_dictÚ	enumerateÚsetÚ	TypeErrorÚ
add_columnr   ÚparseÚtransformersÚ__version__r   rk   Únamed_parametersÚanyrE   rŽ   Úintr   Ú_get_schedulerr”   r•   r~   ÚappendrU   ru   Úadd_callbackr   Útrain)0r)   Útrain_dataloaderr&   Úepochsr�   Úactivation_fctrÙ   rÚ   Úoptimizer_classÚoptimizer_paramsrÔ   Úevaluation_stepsr[   r'   rÃ   Úuse_amprx   Úshow_progress_barr¨   r©   rª   r­   r¯   r½   ré   r™   r¬   ÚexampleÚbatch_textsÚbatch_labelsr¸   ÚtextrÜ   Úadd_label_columnr¹   Úeval_strategy_keyr:   Úparam_optimizerÚno_decayrÍ   ÚpÚoptimizer_grouped_parametersÚ	optimizerÚsteps_per_epochÚnum_train_stepsÚscheduler_objrß   ra   s0                                          `        r+   ÚfitÚFitMixin.fit¶   s»  ø€ ôJ %×&Ñ&ÜÐgÓhÐhõ 	kÝ]ÝSò	ð '/ÐÔ#äÐ-¨|¸QÓ?ˆ
ÜÐ&Ô(>×?Ñ?Ü)×7Ñ7‰MÜÐ% y×1Ñ1´jÐAQ×AYÑAYÔ[o×6pÑ6pÜ)×8Ñ8‰Mä)×7Ñ7ˆMàˆØˆÛ%ˆEÜ(+Ñ\aÓ-bÒ\aÐQX¨w¯}©}¸g¿m¹mÓ.LÑ\aÑ-bÐ(cÑ%ˆK˜Ø�[Ñ ˆEØ�lÑ"ŠFñ &ô  ×)Ò)ÔT]Ô^aÐchÐ^iÔTjÔ*kÒTjÁyÀsÈD¨Y°s°eÐ+<¸dÒ+BÑTjÒ*kÓlˆàÐð	Ü�6‹{˜q˜cÓ!Ø#(Ð ö Ø)×4Ñ4°W¸fÓEˆMô	ô �}Š}œ\×5Ñ5Ó6¼'¿-º-ÈÓ:QÓQñ à&ð 	ô
 -ð 
Ù.Ó0Ø'Ø(2Ø'1Ø#ñ
ð "Ð.>Ñ.JÐO_ÐbcÓOc¡7Ðimðð
ð (Ø'ØØ.Ô.Øó
ˆô" ˜t×4Ñ4Ó6Ó7ˆâAˆñ *9Õ`ª¡  AÄÔC_ÑV^ÓC_×@_Ÿ1©Ò`Ø ,ññ '6ÕY¢o™d˜a ¼Ô<XÉxÓ<X×9XŸ¡oÒYÐknÑoð(
Ð$ñ $Ð$@ÑUÐDTÑUˆ	Ü�i¤×%Ñ%Ü! -Ó0°JÑ>ˆOÜ! /°FÑ":Ó;ˆOÜ/×>Ò>Ø YÐSbñˆMð ÑØ�{‰{×%Ñ%¨Ó*Ù1°$ÑU‘á+¨DÑO‘ä# DÈ>ÑZˆHð ˆ	ØÑ Ø×ÑÔ.¨yÓFÔGØÑ#Ø× Ñ Ô!1°(¸IÓ!FÔGá%ØØØ'ØØØØ! =Ð1Øñ	
ˆð Ñ"Ø× Ñ Ô!2°;È?Ó![Ô\à�‰�ùò{ .cùó +løô ó 	Úð	üóR aùó Zs6   Ã"M4
Ä)M9
ÅM? È
!NÈ/NÉ!NÉ&NÍ?
NÎNc                ó  • [        [        US   R                  5      5       Vs/ s H  n/ PM     nn/ nU H]  n[        UR                  5       H&  u  pgX6   R	                  UR                  5       5        M(     UR	                  UR                  5        M_     U R                  " USSSS.6nU R                  b"  US   R                  S   U R                  ::  d   e[        R                  " X@R                  R                  S:X  a  [        R                  O[        R                  S9R!                  U R"                  R$                  5      nU H,  n	X‰   R!                  U R"                  R$                  5      X‰'   M.     X„4$ s  snf )	Nr   TÚlongest_firstr‡   rˆ   Ú	input_idsr†   )Údtype)ÚrangerŽ   ré   rë   rö   Ústripr³   r‘   Ú
max_lengthÚshapeÚtorchÚtensorr”   r•   rJ   r—   r’   r>   r“   )
r)   r¬   rg   ré   r™   r  r¸   r  Ú	tokenizedÚnames
             r+   Úsmart_batching_collateÚFitMixin.smart_batching_collates  s>  € Ü"¤3 u¨Q¡x§~¡~Ó#6Ô7Ó8Ò7˜“Ñ7ˆÐ8ØˆãˆGÜ& w§}¡}Ö5‘	�Ø‘
×!Ñ! $§*¡*£,Ö/ñ 6ð �M‰M˜'Ÿ-™-Ö(ñ	 ð —N’NØØØ&Øò	
ˆ	ð �‰Ñ&¨)°KÑ*@×*FÑ*FÀqÑ*IÈTÏ_É_Ó*\Ð\Ð\Ü—’˜f¿;¹;×;QÑ;QÐUVÓ;V¬E¯KªKÔ\a×\fÑ\fÑg×jÑjØ�J‰J×Ñó
ˆó ˆDØ'™o×0Ñ0°·±×1BÑ1BÓCˆI‹Oñ ð Ð Ð ùò/ 9s   ¤E>c                óÄ  • [        [        US   5      5       Vs/ s H  n/ PM     nnU H8  n[        U5       H&  u  pVX5   R                  UR	                  5       5        M(     M:     U R
                  " USSSS.6nU R                  b"  US   R                  S   U R                  ::  d   eU H,  nXx   R                  U R                  R                  5      Xx'   M.     U$ s  snf )Nr   Tr‡   rˆ   r  )r  rŽ   rë   rö   r  r‘   r  r  r’   r>   r“   )	r)   r¬   rg   ré   r  r¸   r  r  r  s	            r+   Ú smart_batching_collate_text_onlyÚ)FitMixin.smart_batching_collate_text_only�  sÔ   € Ü"¤3 u¨Q¡x£=Ô1Ó2Ò1˜“Ñ1ˆÐ2ãˆGÜ& wÖ/‘	�Ø‘
×!Ñ! $§*¡*£,Ö/ó 0ñ ð —N’NØØØØò	
ˆ	ð �‰Ñ&¨)°KÑ*@×*FÑ*FÀqÑ*IÈTÏ_É_Ó*\Ð\Ð\ãˆDØ'™o×0Ñ0°·±×1BÑ1BÓCˆI‹Oñ ð Ðùò# 3s   šCc           
     ó
  ^• U R                   Ul        U(       a`  [        5       (       a)  [        R                  R
                  R                  5       nO([        R                  R
                  R                  5       nUb  [        R                  " USS9  SU l
        [        [        U5      U-  5      n[        U R                  R                  5       5      n/ SQnU V^Vs/ s H$  u  mn[!        U4S jU 5       5      (       a  M"  UPM&     snnU
S.U V^Vs/ s H$  u  mn[!        U4S jU 5       5      (       d  M"  UPM&     snnS	S./nU" U40 U	D6n[#        U[$        5      (       a  [&        R(                  " UXgUS
9nUcD  U R*                  R,                  S:X  a  [.        R0                  " 5       O[.        R2                  " 5       nSn[5        USU(       + S9 GH  nSnU R                  R7                  5         U R                  R9                  5         [;        USSU(       + S9 GH«  u  nnU(       GaN  [        R<                  " U R                  R>                  R@                  S9   U R                  " S0 UDSS0D6nU" URB                  5      n U R*                  R,                  S:X  a  U RE                  S5      n U" U U5      n!SSS5        WRG                  5       n"URI                  W!5      RK                  5         URM                  U5        [        R.                  RN                  RQ                  U R                  RS                  5       U5        URU                  U5        URW                  5         URG                  5       U":g  nO¾U R                  " S0 UDSS0D6nU" URB                  5      n U R*                  R,                  S:X  a  U RE                  S5      n U" U U5      n!U!RK                  5         [        R.                  RN                  RQ                  U R                  RS                  5       U5        URU                  5         UR7                  5         U(       d  URU                  5         US-  nUc  GMM  US:”  d  GMV  UU-  S:X  d  GMb  U RY                  X,UUUU5        U R                  R7                  5         U R                  R9                  5         GM®     Uc  GM  U RY                  X,UUSU5        GM     gs  snnf s  snnf ! , (       d  f       GNF= f)a   
Deprecated training method from before Sentence Transformers v4.0, it is recommended to use
:class:`~sentence_transformers.sentence_transformer.trainer.CrossEncoderTrainer` instead. This method should
only be used if you encounter issues with your existing training scripts after upgrading to v4.0.

This training approach uses a DataLoader and Loss function to train the model.

Args:
    train_dataloader: The DataLoader with InputExample instances
    evaluator: An evaluator (sentence_transformers.cross_encoder.evaluation)
        evaluates the model performance during training on held-
        out dev data. It is used to determine the best model
        that is saved to disk.
    epochs: Number of epochs for training
    loss_fct: Which loss function to use for training. If None,
        will use BinaryCrossEntropy() if self.config.num_labels == 1
        else CrossEntropyLoss(). Defaults to None.
    activation_fct: Activation function applied on top of logits
        output of model.
    scheduler: Learning rate scheduler. Available schedulers:
        constantlr, warmupconstant, warmuplinear, warmupcosine,
        warmupcosinewithhardrestarts
    warmup_steps: Behavior depends on the scheduler. For
        WarmupLinear (default), the learning rate is increased
        from o up to the maximal learning rate. After these many
        training steps, the learning rate is decreased linearly
        back to zero.
    optimizer_class: Optimizer
    optimizer_params: Optimizer parameters
    weight_decay: Weight decay for model parameters
    evaluation_steps: If > 0, evaluate the model using evaluator
        after each number of training steps
    output_path: Storage path for the model and evaluation files
    save_best_model: If true, the best model (according to
        evaluator) is stored at output_path
    max_grad_norm: Used for gradient normalization.
    use_amp: Use Automatic Mixed Precision (AMP). Only for
        Pytorch >= 1.6.0
    callback: Callback function that is invoked after each
        evaluation. It must accept the following three
        parameters in this order: `score`, `epoch`, `steps`
    show_progress_bar: If True, output a tqdm progress bar
NTrY   i�igÿrÇ   c              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr"   r�   rÊ   s     €r+   rÎ   Ú#FitMixin.old_fit.<locals>.<genexpr>ô  rÐ   rÑ   rÒ   c              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr"   r�   rÊ   s     €r+   rÎ   r$  ÷  rÖ   rÑ   r×   rØ   r†   FÚEpoch)ÚdescÚdisabler   Ú	Iterationgš™™™™™©?)r'  Ú	smoothingr(  )Údevice_typeÚreturn_dictrŒ   r�   )-r  rä   r   r  ÚnpuÚampÚ
GradScalerÚcudar\   r_   Ú
best_scorerô   rŽ   rk   r>   rò   ró   ri   rE   r   rõ   r”   r•   r
   ÚBCEWithLogitsLossr©   r   Ú	zero_gradrø   r   Úautocastr“   Útyperœ   r–   Ú	get_scaleÚscaleÚbackwardÚunscale_ÚutilsÚclip_grad_norm_Ú
parametersÚstepÚupdateÚ_eval_during_training)#r)   rù   r&   rú   r�   rû   rÙ   rÚ   rü   rý   rÔ   rþ   r[   r'   rÃ   rÿ   rx   r   Úscalerr  r  r  rÍ   r	  r
  r  Úskip_schedulerre   Útraining_stepsÚfeaturesr™   Úmodel_predictionsrœ   Ú
loss_valueÚscale_before_steps#                         `            r+   Úold_fitÚFitMixin.old_fit¡  s  ø€ ð~ '+×&AÑ&AÐÔ#æÜ%×'Ñ'ÜŸ™Ÿ™×1Ñ1Ó3‘äŸ™Ÿ™×2Ñ2Ó4�àÑ"Ü�KŠK˜¨dÒ3à"ˆŒÜœcÐ"2Ó3°fÑ<Ó=ˆô ˜tŸz™z×:Ñ:Ó<Ó=ˆâAˆñ *9Õ`ª¡  AÄÔC_ÑV^ÓC_×@_Ÿ1©Ò`Ø ,ññ '6ÕY¢o™d˜a ¼Ô<XÉxÓ<X×9XŸ¡oÒYÐknÑoð(
Ð$ñ $Ð$@ÑUÐDTÑUˆ	ä�i¤×%Ñ%Ü+×:Ò:Ø YÐSbñˆIð ÑØ15·±×1GÑ1GÈ1Ó1L”r×+Ò+Ô-ÔRT×ReÒReÓRgˆHàˆÜ˜F¨Ð>OÔ:OÕPˆEØˆNØ�J‰J× Ñ Ô"Ø�J‰J×ÑÔä$(Ø  {¸dÐPaÔLaõ%Ñ �˜&÷ ÜŸš°D·J±J×4EÑ4E×4JÑ4JÓKØ,0¯JªJÑ,T¸Ñ,TÈtÒ,TÐ)Ù!/Ð0A×0HÑ0HÓ!I˜ØŸ;™;×1Ñ1°QÓ6Ø%+§[¡[°£_˜FÙ%-¨f°fÓ%=˜
÷ Lð )/×(8Ñ(8Ó(:Ð%Ø—L‘L Ó,×5Ñ5Ô7Ø—O‘O IÔ.Ü—H‘H—N‘N×2Ñ2°4·:±:×3HÑ3HÓ3JÈMÔZØ—K‘K 	Ô*Ø—M‘M”Oà%+×%5Ñ%5Ó%7Ð;LÑ%L‘Nà(,¯
ª
Ñ(P°XÑ(PÈ4Ò(PÐ%Ù+Ð,=×,DÑ,DÓE�FØ—{‘{×-Ñ-°Ó2Ø!'§¡¨R£˜Ù!)¨&°&Ó!9�JØ×'Ñ'Ô)Ü—H‘H—N‘N×2Ñ2°4·:±:×3HÑ3HÓ3JÈMÔZØ—N‘NÔ$à×#Ñ#Ô%æ%Ø—N‘NÔ$à !Ñ#�àÔ(Ð-=ÀÖ-AÀnÐWgÑFgÐklÖFlØ×.Ñ.Ø!°ÀÈÐX`ôð —J‘J×(Ñ(Ô*Ø—J‘J×$Ñ$×&ñU%ðX Ô$Ø×*Ñ*¨9À?ÐTYÐ[]Ð_g×hòe Qùó# aùó Z÷. LÖKús%   Ã!S0ÄS0Ä!S6Ä9S6É AS<Ó<
Tc                ó  • Ub‡  U" XXES9nUb	  U" XtU5        [        U[        5      (       a/  [        US5      (       a  UR                  U;   a  XqR                     nXpR                  :”  a   Xpl        U(       a  U R                  U5        gggg)z#Runs evaluation during the trainingNrd   r6   )ri   rj   ræ   r6   r1  r9   )r)   r&   r[   r'   re   rf   rx   Úscores           r+   r?  ÚFitMixin._eval_during_training9  sˆ   € àÑ Ù˜dÀ5ÑVˆEØÑ#Ù˜ uÔ-Ü˜%¤×&Ñ&¬7°9Ð>N×+OÑ+OÐT]×TlÑTlÐpuÓTuØ×6Ñ6Ñ7�Ø—‘Ó&Ø"'”Þ"Ø—I‘I˜kÕ*ð #ð 'ð !r-   )r1  )"r)   r   rù   r   r&   rF   rú   rô   rÙ   rE   rÚ   rô   rü   útype[Optimizer]rý   údict[str, object]rÔ   rJ   rþ   rô   r[   rs   r'   rG   rÃ   rJ   rÿ   rG   rx   r|   r   rG   rH   rI   )r¬   úlist[InputExample]rH   ztuple[BatchEncoding, Tensor])r¬   rN  rH   r   ) rù   r   r&   rF   rú   rô   rÙ   rE   rÚ   rô   rü   rL  rý   rM  rÔ   rJ   rþ   rô   r[   rs   r'   rG   rÃ   rJ   rÿ   rG   rx   r|   r   rG   rH   rI   )rH   rI   )rL   rM   rN   rO   rP   r
   r¡   r  ÚoptimÚAdamWr  r  r   rG  r?  rQ   r�   r-   r+   r£   r£   ³   s$  † Ù_ð
 +/ØØØ—{’{“}Ø'Ø!Ø+0¯;©;×+<Ñ+<Ø/3°T¨lØ"Ø !Ø"&Ø $Ø ØØ6:Ø"&ð%{Øð{à$ð{ð (ð{ð ð	{ð ð{ð ð{ð )ð{ð ,ð{ð ð{ð ð{ð  ð{ð ð{ð ð{ð  ð!{ð" 4ð#{ð$  ð%{ð& 
õ'{ôz!ô4ð. +/ØØØ—{’{“}Ø'Ø!Ø+0¯;©;×+<Ñ+<Ø/3°T¨lØ"Ø !Ø"&Ø $Ø ØØ6:Ø"&ð%Vià$ðVið (ðVið ð	Við ðVið ðVið )ðVið ,ðVið ðVið ðVið  ðVið ðVið ðVið  ð!Við" 4ð#Við$  ð%Við& 
õ'Vi÷p+r-   r£   )<Ú
__future__r   Úloggingr\   Úcollections.abcr   Úpathlibr   Útypingr   r   r  rð   Ú	packagingr   r	   r
   Útorch.optimr   Útorch.utils.datar   Útqdm.autonotebookr   r   r   r   r   r   Ú$transformers.tokenization_utils_baser   Ú/sentence_transformers.base.evaluation.evaluatorr   Ú"sentence_transformers.base.samplerr   Ú1sentence_transformers.cross_encoder.training_argsr   ÚLsentence_transformers.sentence_transformer.datasets.no_duplicates_dataloaderr   ÚBsentence_transformers.sentence_transformer.datasets.sentence_labelr   Ú0sentence_transformers.sentence_transformer.modelr   Ú2sentence_transformers.sentence_transformer.readersr   Úsentence_transformers.utilr   Údatasetsr   Ú)sentence_transformers.cross_encoder.modelr   Ú@sentence_transformers.sentence_transformer.readers.input_exampleÚ	getLoggerrL   Úloggerr   rU   ru   ÚModuler~   r£   r�   r-   r+   Ú<module>ri     s»   ðÝ "ã Û 	Ý $Ý ß %ã Û Ý ß Ý !Ý 'ß *ß ^Ó ^Ý >å IÝ <Ý [Ý oÝ cÝ PÝ KÝ <á×ÑÝ æÝFÝ]ð 
×	Ò	˜8Ó	$€ô%4˜ô %4ôP&g˜ô &gôRL�ô Lô2�2—9‘9ô ÷DQ+ò Q+r-   