Ë
    :�DjP  ã                   óš  — d Z 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
mZmZmZmZmZmZ ddlZddlmZ ddlmZmZmZmZ g d¢Zeeeeef   f   Zee
e   e
eeef      f   ZeZ G d	„ d
e«      Zde
e   de
eeeef      fd„Z  ed«      Z!de!de!fd„Z" G d„ d«      Z# G d„ de«      Z$ G d„ de«      Z% G d„ de«      Z& G d„ de«      Z'y)z}Callback library containing training routines.  See :doc:`Callback Functions
</python/callbacks>` for a quick introduction.

é    N)ÚABC)
ÚAnyÚCallableÚDictÚListÚOptionalÚSequenceÚTupleÚTypeVarÚUnionÚcasté   )Ú
collective)ÚBoosterÚDMatrixÚXGBoostErrorÚ_parse_eval_str)ÚTrainingCallbackÚLearningRateSchedulerÚEarlyStoppingÚEvaluationMonitorÚTrainingCheckPointÚCallbackContainerc                   ó€   — e Zd ZdZeeeeef   f   Zdd„Zde	de	fd„Z
de	de	fd„Zde	ded	edefd
„Zde	ded	edefd„Zy)r   zCInterface for training callback.

    .. versionadded:: 1.3.0

    ÚreturnNc                  ó   — y ©N© )Úselfs    úTC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\xgboost/callback.pyÚ__init__zTrainingCallback.__init__5   s   € Øó    Úmodelc                 ó   — |S )zRun before training starts.r   ©r   r#   s     r    Úbefore_trainingz TrainingCallback.before_training8   ó   € àˆr"   c                 ó   — |S )zRun after training is finished.r   r%   s     r    Úafter_trainingzTrainingCallback.after_training<   r'   r"   ÚepochÚ	evals_logc                  ó   — y)z�Run before each iteration.  Returns True when training should stop. See
        :py:meth:`after_iteration` for details.

        Fr   ©r   r#   r*   r+   s       r    Úbefore_iterationz!TrainingCallback.before_iteration@   s   € ð
 r"   c                  ó   — y)añ  Run after each iteration.  Returns `True` when training should stop.

        Parameters
        ----------

        model :
            Eeither a :py:class:`~xgboost.Booster` object or a CVPack if the cv function
            in xgboost is being used.
        epoch :
            The current training iteration.
        evals_log :
            A dictionary containing the evaluation history:

            .. code-block:: python

                {"data_name": {"metric_name": [0.5, ...]}}

        Fr   r-   s       r    Úafter_iterationz TrainingCallback.after_iterationG   s   € ð& r"   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚ
_ScoreListÚEvalsLogr!   Ú_Modelr&   r)   ÚintÚboolr.   r0   r   r"   r    r   r   ,   s�   „ ñð �C˜˜c :˜oÑ.Ð.Ñ/€Hóð Vð °ó ð Fð ¨vó ð fð °Sð ÀXð ÐRVó ð Vð °Cð ÀHð ÐQUô r"   r   Úrlistr   c                 ó¢  — i }| d   j                  «       d   }| D ]’  }|j                  «       }||d   k(  sJ ‚t        |dd «      D ]e  \  }}t        |t        «      s|j	                  «       }|j                  d«      \  }}||f|vrg |||f<   |||f   j                  t        |«      «       Œg Œ” |}	g }
t        |j                  «       d„ ¬«      D ]|  \  \  }}}t        j                  |«      }t        |	t        «      s|	j	                  «       }	t        j                  |«      t        j                  |«      }}|
j                  |||fg«       Œ~ |
S )z#Aggregate cross-validation results.r   r   Nú:c                 ó   — | d   d   S ©Nr   r   )Úxs    r    ú<lambda>z_aggcv.<locals>.<lambda>n   s   € ¸A¸a¹DÀ¹G€ r"   )Úkey)ÚsplitÚ	enumerateÚ
isinstancer5   ÚdecodeÚappendÚfloatÚsortedÚitemsÚnumpyÚarrayÚmeanÚstdÚextend)r;   ÚcvmapÚidxÚlineÚarrÚ
metric_idxÚitÚkÚvÚmsgÚresultsÚ_ÚnameÚsÚas_arrrM   rN   s                    r    Ú_aggcvr^   ]   sJ  € ð 13€EØ
�‰(�.‰.Ó
˜1Ñ
€CØò 	4ˆØŸ™›ˆØ�c˜!‘fŠ}ÑÜ'¨¨A¨B¨Ó0ò 	4‰NˆJ˜Ü˜b¤#Ô&Ø—Y‘Y“[�Ø—8‘8˜C“=‰DˆAˆqØ˜Aˆ eÑ+Ø)+��z 1�oÑ&Ø�:˜q�/Ñ"×)Ñ)¬%°«(Õ3ñ	4ð	4ð €CØ€GÜ˜uŸ{™{›}Ñ2CÔDò ,‰‰	ˆˆD�1Ü—‘˜Q“ˆÜ˜#œsÔ#Ø—*‘*“,ˆCÜ—J‘J˜vÓ&¬¯	©	°&Ó(9ˆcˆØ�‰˜˜t SÐ)Ð*Õ+ð,ð €Nr"   Ú_ARTÚscorec                 ó  — t        j                  «       }|dk7  sJ ‚|dk(  r| S t        | t        «      rt	        d«      ‚t        j                  | g«      }t        j                  |t         j                  j                  «      |z  }|d   S )z§Helper function for computing customized metric in distributed
    environment.  Not strictly correct as many functions don't use mean value
    as final result.

    r   r   zBxgboost.cv function should not be used in distributed environment.)
r   Úget_world_sizerE   ÚtupleÚ
ValueErrorrK   rL   Ú	allreduceÚOpÚSUM)r`   ÚworldrS   s      r    Ú_allreduce_metricri   {   s~   € ô ×%Ñ%Ó'€EØ�AŠ:ÑØ�‚zØˆÜ�%œÔÜØPó
ð 	
ô �+‰+�u�gÓ
€CÜ
×
Ñ
˜s¤J§M¡M×$5Ñ$5Ó
6¸Ñ
>€CØˆq‰6€Mr"   c                   ó  — e Zd ZdZ	 	 	 ddee   dee   dededdf
d„Z	d	e
de
fd
„Zd	e
de
fd„Zd	e
dededeeeeef         def
d„Zdeeeeef      eeeeef      f   deddfd„Zd	e
dededeeeeef         def
d„Zy)r   zfA special internal callback for invoking a list of other callbacks.

    .. versionadded:: 1.3.0

    NÚ	callbacksÚmetricÚoutput_marginÚis_cvr   c                 ó   — t        |«      | _        |D ]  }t        |t        «      rŒt	        d«      ‚ d}|�t        |«      st	        |«      ‚|| _        t        j                  «       | _	        || _
        || _        | j                  rd | _        y y )Nz3callback must be an instance of `TrainingCallback`.z†metric must be callable object for monitoring.  For builtin metrics, passing them in training parameter invokes monitor automatically.)Úsetrk   rE   r   Ú	TypeErrorÚcallablerl   ÚcollectionsÚOrderedDictÚhistoryÚ_output_marginrn   Úaggregated_cv)r   rk   rl   rm   rn   ÚcbrX   s          r    r!   zCallbackContainer.__init__•   s•   € ô ˜Y›ˆŒØò 	WˆBÜ˜bÔ"2Õ3ÜÐ UÓVÐVð	Wð
Rð 	ð Ð¤h¨vÔ&6Ü˜C“.Ð àˆŒÜ2=×2IÑ2IÓ2KˆŒØ+ˆÔØˆŒ
à�:Š:Ø!%ˆDÕð r"   r#   c                 óÚ   — | j                   D ][  }|j                  |¬«      }d}| j                  r"t        |j                  t
        «      rŒ>J |«       ‚t        |t        «      rŒVJ |«       ‚ |S )z Function called before training.©r#   z'before_training should return the model)rk   r&   rn   rE   ÚcvfoldsÚlistr   ©r   r#   ÚcrX   s       r    r&   z!CallbackContainer.before_training°   sc   € à—‘ò 	7ˆAØ×%Ñ%¨EÐ%Ó2ˆEØ;ˆCØ�zŠzÜ! %§-¡-´Õ6Ð;¸Ô;ä! %¬Õ1Ð6°3Ô6ð	7ð ˆr"   c                 óÚ   — | j                   D ][  }|j                  |¬«      }d}| j                  r"t        |j                  t
        «      rŒ>J |«       ‚t        |t        «      rŒVJ |«       ‚ |S )zFunction called after training.rz   z&after_training should return the model)rk   r)   rn   rE   r{   r|   r   r}   s       r    r)   z CallbackContainer.after_training»   sc   € à—‘ò 	7ˆAØ×$Ñ$¨5Ð$Ó1ˆEØ:ˆCØ�zŠzÜ! %§-¡-´Õ6Ð;¸Ô;ä! %¬Õ1Ð6°3Ô6ð	7ð ˆr"   r*   ÚdtrainÚevalsc                 óH   ‡ ‡‡— t        ˆˆˆ fd„‰ j                  D «       «      S )z*Function called before training iteration.c              3   óX   •K  — | ]!  }|j                  ‰‰‰j                  «      –— Œ# y ­wr   )r.   ru   ©Ú.0r~   r*   r#   r   s     €€€r    ú	<genexpr>z5CallbackContainer.before_iteration.<locals>.<genexpr>Ï   s)   øè ø€ ò 
Ø?@ˆA×Ñ˜u e¨T¯\©\×:ñ
ùó   ƒ'*)Úanyrk   )r   r#   r*   r€   r�   s   ```  r    r.   z"CallbackContainer.before_iterationÇ   s#   ú€ ô õ 
ØDHÇNÁNô
ó 
ð 	
r"   r`   c           	      óê  — |D �]m  }|d   }|d   }| j                   r3t        t        t        t        t        t        f   |«      d   «      }||f}n|}|j                  d«      }|d   }	dj                  |dd  «      }
t        |«      }|	| j                  vr!t        j                  «       | j                  |	<   | j                  |	   }|
|vrt        t        g «      ||
<   ||
   }| j                   rPt        t        t        t        t        f      |«      j                  t        t        t        t        f   |«      «       �Œ:t        t        t           |«      j                  t        t        |«      «       �Œp y )Nr   r   é   ú-)rn   rH   r   r
   r5   rC   Újoinri   ru   rs   rt   r6   r   rG   )r   r`   r*   Údr[   r\   rN   r@   Úsplited_namesÚ	data_nameÚmetric_nameÚdata_historyÚmetric_historys                r    Ú_update_historyz!CallbackContainer._update_historyÓ   sF  € ð
 ó 	IˆAØ˜!™ˆDØ˜‘tˆAØ�zŠzÜœD¤¤s¬E´5Ð'8Ñ!9¸1Ó=¸aÑ@ÓA�Ø ˜H‘à�Ø ŸJ™J s›OˆMØ% aÑ(ˆIØŸ(™( =°°Ð#4Ó5ˆKÜ! !Ó$ˆAØ §¡Ñ,Ü*5×*AÑ*AÓ*C�—‘˜YÑ'ØŸ<™<¨	Ñ2ˆLØ ,Ñ.Ü,0´¸RÓ,@�˜[Ñ)Ø)¨+Ñ6ˆNØ�zŠzÜ”Tœ%¤¤u Ñ-Ñ.°Ó?×FÑFÜœœu¤e˜|Ñ,¨aÓ0öô ”Tœ%‘[ .Ó1×8Ñ8¼¼eÀQ»ÖHñ/	Ir"   c                 óÜ  ‡ ‡‡— ‰ j                   rL‰j                  ‰‰ j                  ‰ j                  «      }t	        |«      }|‰ _        ‰ j                  |‰«       np|€g n|}|D ]   \  }}|j                  d«      dk(  rŒJ d«       ‚ ‰j                  |‰‰ j                  ‰ j                  «      }t        |«      }	‰ j                  |	‰«       t        ˆˆˆ fd„‰ j                  D «       «      }
|
S )z)Function called after training iteration.r‹   éÿÿÿÿz#Dataset name should not contain `-`c              3   óX   •K  — | ]!  }|j                  ‰‰‰j                  «      –— Œ# y ­wr   )r0   ru   r„   s     €€€r    r†   z4CallbackContainer.after_iteration.<locals>.<genexpr>  s$   øè ø€ ÒXÀA�!×#Ñ# E¨5°$·,±,×?ÑXùr‡   )rn   Úevalrl   rv   r^   rw   r“   ÚfindÚeval_setr   rˆ   rk   )r   r#   r*   r€   r�   ÚscoresrZ   r[   r`   Úmetric_scoreÚrets   ```        r    r0   z!CallbackContainer.after_iterationñ   sÓ   ú€ ð �:Š:Ø—Z‘Z  t§{¡{°D×4GÑ4GÓHˆFÜ˜F“^ˆFØ!'ˆDÔØ× Ñ  ¨Õ/à˜-‘B¨UˆEØ ò S‘��4Ø—y‘y “~¨Ó+ÐRÐ-RÔRðSàŸ™¨¨u°d·k±kÀ4×CVÑCVÓWˆEÜ*¨5Ó1ˆLØ× Ñ  ¨uÔ5ÜÕXÈÏÉÔXÓXˆØˆ
r"   )NTF)r1   r2   r3   r4   r	   r   r   r   r:   r!   r8   r&   r)   r9   r   r   r
   r5   r.   r   rH   r“   r0   r   r"   r    r   r   Ž   sV  „ ñð &*Ø"Øñ&àÐ,Ñ-ð&ð ˜Ñ"ð&ð ð	&ð
 ð&ð 
ó&ð6	 Vð 	°ó 	ð
 Fð 
¨vó 
ð

àð

ð ð

ð ð	

ð
 ˜˜U 7¨C <Ñ0Ñ1Ñ2ð

ð 
ó

ðIà�T˜%  U 
Ñ+Ñ,¨d°5¸¸eÀUÐ9JÑ3KÑ.LÐLÑMðIð ðIð 
ó	Ið<àðð ðð ð	ð
 ˜˜U 7¨C <Ñ0Ñ1Ñ2ðð 
ôr"   r   c                   ót   ‡ — e Zd ZdZdeeegef   ee   f   ddfˆ fd„Z	de
dedej                  defd	„Zˆ xZS )
r   a  Callback function for scheduling learning rate.

    .. versionadded:: 1.3.0

    Parameters
    ----------

    learning_rates :
        If it's a callable object, then it should accept an integer parameter
        `epoch` and returns the corresponding learning rate.  Otherwise it
        should be a sequence like list or tuple with the same size of boosting
        rounds.

    Úlearning_ratesr   Nc                 óê   •‡— t        ‰«      s;t        ‰t        j                  j                  «      st        dt        ‰«      › �«      ‚t        ‰«      r‰| _        n
ˆfd„| _        t        ‰| �%  «        y )Nz=Invalid learning rates, expecting callable or sequence, got: c                 ó*   •— t        t        ‰«      |    S r   )r   r	   )r*   rž   s    €r    rA   z0LearningRateScheduler.__init__.<locals>.<lambda>'  s   ø€ ´´X¸~Ó0NÈuÑ0U€ r"   )
rr   rE   rs   Úabcr	   rq   Útyperž   Úsuperr!   )r   rž   Ú	__class__s    `€r    r!   zLearningRateScheduler.__init__  sj   ù€ ô ˜Ô'´
ØœKŸO™O×4Ñ4ô1
ô ØOÜ˜Ó'Ð(ð*óð ô
 �NÔ#Ø"0ˆDÕã"UˆDÔÜ‰ÑÕr"   r#   r*   r+   c                 óF   — |j                  d| j                  |«      «       y)NÚlearning_rateF)Ú	set_paramrž   r-   s       r    r0   z%LearningRateScheduler.after_iteration*  s    € ð 	�‰˜¨×)<Ñ)<¸UÓ)CÔDØr"   )r1   r2   r3   r4   r   r   r9   rH   r	   r!   r8   r   r7   r:   r0   Ú__classcell__©r¤   s   @r    r   r   	  sa   ø„ ñðØ# H¨c¨U°E¨\Ñ$:¸HÀU¹OÐ$KÑLðà	õð"ØðØ$'ðØ4D×4MÑ4Mðà	÷r"   r   c                   óÐ   ‡ — e Zd ZdZ	 	 	 	 	 ddedee   dee   dee   dee   ded	dfˆ fd
„Z	de
d	e
fd„Zdededede
ded	efd„Zde
dedej                  d	efd„Zde
d	e
fd„Zˆ xZS )r   a)  Callback function for early stopping

    .. versionadded:: 1.3.0

    Parameters
    ----------
    rounds :
        Early stopping rounds.
    metric_name :
        Name of metric that is used for early stopping.
    data_name :
        Name of dataset that is used for early stopping.
    maximize :
        Whether to maximize evaluation metric.  None means auto (discouraged).
    save_best :
        Whether training should return the best model or the last model.
    min_delta :

        .. versionadded:: 1.5.0

        Minimum absolute change in score to be qualified as an improvement.

    Examples
    --------

    .. code-block:: python

        es = xgboost.callback.EarlyStopping(
            rounds=2,
            min_delta=1e-3,
            save_best=True,
            maximize=False,
            data_name="validation_0",
            metric_name="mlogloss",
        )
        clf = xgboost.XGBClassifier(tree_method="hist", device="cuda", callbacks=[es])

        X, y = load_digits(return_X_y=True)
        clf.fit(X, y, eval_set=[(X, y)])
    NÚroundsr�   r�   ÚmaximizeÚ	save_bestÚ	min_deltar   c                 óâ   •— || _         || _        || _        || _        || _        i | _        || _        | j                  dk  rt        d«      ‚d| _        i | _	        d| _
        t        ‰| �1  «        y )Nr   z(min_delta must be greater or equal to 0.)Údatar�   r«   r­   r¬   Ústopping_historyÚ
_min_deltard   Úcurrent_roundsÚbest_scoresÚstarting_roundr£   r!   )r   r«   r�   r�   r¬   r­   r®   r¤   s          €r    r!   zEarlyStopping.__init__]  ss   ø€ ð ˆŒ	Ø&ˆÔØˆŒØ"ˆŒØ ˆŒØ;=ˆÔØ#ˆŒØ�?‰?˜QÒÜÐGÓHÐHà#$ˆÔØ!#ˆÔØ#$ˆÔÜ‰ÑÕr"   r#   c                 ó0   — |j                  «       | _        |S r   )Únum_boosted_roundsrµ   r%   s     r    r&   zEarlyStopping.before_trainingu  s   € Ø#×6Ñ6Ó8ˆÔØˆr"   r`   r[   rl   r*   c                 ó  ‡ ‡‡— dt         dt        fd„Šdt         dt         dt        fˆˆ fd„}dt         dt         dt        fˆˆ fd„}‰ j                  €*d}‰d	k7  rt	        ˆfd
„|D «       «      rd‰ _        nd‰ _        ‰ j                  r|}	n|}	‰ j
                  sd‰ _        i ‰ j
                  |<   t        t        |g«      ‰ j
                  |   ‰<   i ‰ j                  |<   |g‰ j                  |   ‰<   |j                  t        |«      t        |«      ¬«       nÖ |	|‰ j                  |   ‰   d   «      s7‰ j
                  |   ‰   j                  |«       ‰ xj                  dz  c_        nƒ‰ j
                  |   ‰   j                  |«       ‰ j                  |   ‰   j                  |«       ‰ j
                  |   ‰   d   }
|j                  t        |
«      t        |«      ¬«       d‰ _        ‰ j                  ‰ j                  k\  ryy)NÚvaluer   c                 ó0   — t        | t        «      r| d   S | S )z+get score if it's cross validation history.r   )rE   rc   )r¹   s    r    Úget_sz+EarlyStopping._update_rounds.<locals>.get_s|  s   € ä)¨%´Ô7�5˜‘8ÐB¸UÐBr"   ÚnewÚbestc                 ób   •— t        j                   ‰| «      ‰j                  z
   ‰|«      «      S )z-New score should be greater than the old one.©rK   Úgreaterr²   ©r¼   r½   r»   r   s     €€r    r¬   z.EarlyStopping._update_rounds.<locals>.maximize€  s%   ø€ ä—=‘=¡ s£¨d¯o©oÑ!=¹uÀT»{ÓKÐKr"   c                 ób   •— t        j                   ‰|«      ‰j                  z
   ‰| «      «      S )z,New score should be lesser than the old one.r¿   rÁ   s     €€r    Úminimizez.EarlyStopping._update_rounds.<locals>.minimize„  s%   ø€ ä—=‘=¡ t£¨t¯©Ñ!>ÁÀcÃ
ÓKÐKr"   )
ÚaucÚaucprÚprezpre@ÚmapÚndcgzauc@zaucpr@zmap@zndcg@Úmapec              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr   )Ú
startswith)r…   r@   rl   s     €r    r†   z/EarlyStopping._update_rounds.<locals>.<genexpr>—  s   øè ø€ Ò'WÀ¨×(9Ñ(9¸!×(<Ñ'Wùs   ƒTFr   )Ú
best_scoreÚbest_iterationr•   r   )Ú_ScorerH   r:   r¬   rˆ   r±   r³   r   r6   r´   Úset_attrr5   rG   r«   )r   r`   r[   rl   r#   r*   r¬   rÃ   Úmaximize_metricsÚ
improve_opÚrecordr»   s   `  `       @r    Ú_update_roundszEarlyStopping._update_roundsy  sú  ú€ ð	Cœð 	C¤Eó 	Cð	Lœ&ð 	L¬ð 	L´4ö 	Lð	Lœ&ð 	L¬ð 	L´4ö 	Lð �=‰=Ð ð Ðð ˜Ò¤CÓ'WÐFVÔ'WÔ$WØ $�•à %�”à�=Š=Ø!‰Jà!ˆJà×$Ò$Ø"#ˆDÔØ*,ˆD×!Ñ! $Ñ'Ü26´zÀEÀ7Ó2KˆD×!Ñ! $Ñ'¨Ñ/Ø%'ˆD×Ñ˜TÑ"Ø.3¨WˆD×Ñ˜TÑ" 6Ñ*Ø�N‰N¤c¨%£jÄÀUÃˆNÕLÙ˜E 4×#3Ñ#3°DÑ#9¸&Ñ#AÀ"Ñ#EÔFà×!Ñ! $Ñ'¨Ñ/×6Ñ6°uÔ=Ø×Ò 1Ñ$Öà×!Ñ! $Ñ'¨Ñ/×6Ñ6°uÔ=Ø×Ñ˜TÑ" 6Ñ*×1Ñ1°%Ô8Ø×*Ñ*¨4Ñ0°Ñ8¸Ñ<ˆFØ�N‰N¤c¨&£kÄ#ÀeÃ*ˆNÔMØ"#ˆDÔà×Ñ $§+¡+Ò-àØr"   r+   c                 ó   — || j                   z  }d}t        |j                  «       «      dk  rt        |«      ‚| j                  r| j                  }nt        |j                  «       «      d   }||vrt        d|› �«      ‚t        |t        «      st        dt        |«      › �«      ‚||   }| j                  r| j                  }nt        |j                  «       «      d   }||vrt        d|› �«      ‚||   d   }| j                  |||||«      S )Nz;Must have at least 1 validation dataset for early stopping.r   r•   zNo dataset named: z1The name of the dataset should be a string. Got: zNo metric named: )rµ   ÚlenÚkeysrd   r°   r|   rE   r5   rq   r¢   r�   rÓ   )	r   r#   r*   r+   rX   r�   Údata_logr�   r`   s	            r    r0   zEarlyStopping.after_iteration¸  s   € ð 	�×$Ñ$Ñ$ˆØKˆÜˆy�~‰~ÓÓ  1Ò$Ü˜S“/Ð!ð �9Š9ØŸ	™	‰Iô ˜YŸ^™^Ó-Ó.¨rÑ2ˆIØ˜IÑ%ÜÐ1°)°Ð=Ó>Ð>ä˜)¤SÔ)ÜØCÄDÈÃOÐCTÐUóð ð ˜YÑ'ˆð ×ÒØ×*Ñ*‰Kô ˜xŸ}™}›Ó/°Ñ3ˆKØ˜hÑ&ÜÐ0°°Ð>Ó?Ð?ð ˜Ñ% bÑ)ˆØ×"Ñ" 5¨)°[À%ÈÓOÐOr"   c                 óÆ   — | j                   s|S 	 |j                  }|j                  }|�|€J ‚|d |dz    }||_        ||_        |S # t        $ r}t        d«      |‚d }~ww xY w)Nr   z4`save_best` is not applicable to the current booster)r­   rÍ   rÌ   r   )r   r#   rÍ   rÌ   Úes        r    r)   zEarlyStopping.after_trainingÜ  s…   € Ø�~Š~ØˆLð
	Ø"×1Ñ1ˆNØ×)Ñ)ˆJØ!Ð-°*Ð2HÑHØÐ.˜N¨QÑ.Ð/ˆEØ#1ˆEÔ Ø)ˆEÔð ˆøô ò 	ÜØFóàðûð	ús   �4A Á	A ÁAÁA )NNNFg        )r1   r2   r3   r4   r9   r   r5   r:   rH   r!   r8   r&   rÎ   rÓ   r   r7   r0   r)   r¨   r©   s   @r    r   r   2  s   ø„ ñ'ðZ &*Ø#'Ø#'Ø$)Øñàðð ˜c‘]ðð ˜C‘=ð	ð
 ˜4‘.ðð ˜D‘>ðð ðð 
õð0 Vð °ó ð=Øð=Ø#&ð=Ø03ð=Ø<Bð=ØKNð=à	ó=ð~"PØð"PØ$'ð"PØ4D×4MÑ4Mð"Pà	ó"PðH Fð ¨v÷ r"   r   c            
       ó”   ‡ — e Zd ZdZddedededdfˆ fd„Zded	ed
ede	e   def
d„Z
dededej                  defd„Zdedefd„Zˆ xZS )r   aM  Print the evaluation result at each iteration.

    .. versionadded:: 1.3.0

    Parameters
    ----------

    rank :
        Which worker should be used for printing the result.
    period :
        How many epoches between printing.
    show_stdv :
        Used in cv to show standard deviation.  Users should not specify it.
    ÚrankÚperiodÚ	show_stdvr   Nc                 óh   •— || _         || _        || _        |dkD  sJ ‚d | _        t        ‰| �  «        y r?   )Úprinter_rankrÝ   rÜ   Ú_latestr£   r!   )r   rÛ   rÜ   rÝ   r¤   s       €r    r!   zEvaluationMonitor.__init__ÿ  s5   ø€ Ø ˆÔØ"ˆŒØˆŒØ˜ŠzÑà&*ˆŒÜ‰ÑÕr"   r°   rl   r`   rN   c                 ój   — |�!| j                   rd|dz   |z   › d|d›d|d›�}|S d|dz   |z   › d|d›�}|S )Nú	r‹   r=   z.5fú+)rÝ   )r   r°   rl   r`   rN   rX   s         r    Ú_fmt_metriczEvaluationMonitor._fmt_metric  sa   € ð ˆ?˜tŸ~š~Ø�t˜c‘z FÑ*Ð+¨1¨U°3¨K°q¸¸S¸	ÐBˆCð ˆ
ð �t˜c‘z FÑ*Ð+¨1¨U°3¨KÐ8ˆCØˆ
r"   r#   r*   r+   c           	      óÐ  — |syd|› d�}t        j                  «       | j                  k(  r¼|j                  «       D ]_  \  }}|j                  «       D ]G  \  }}d }	t	        |d   t
        «      r|d   d   }
|d   d   }	n|d   }
|| j                  |||
|	«      z  }ŒI Œa |dz  }|| j                  z  dk(  s| j                  dk(  rt        j                  |«       d | _	        y|| _	        y)NFú[ú]r•   r   r   ú
)
r   Úget_rankrß   rJ   rE   rc   rä   rÜ   Úcommunicator_printrà   )r   r#   r*   r+   rX   r°   rl   r�   ÚlogÚstdvr`   s              r    r0   z!EvaluationMonitor.after_iteration  s  € ñ Øà�u�g˜Q�<ˆÜ×ÑÓ  D×$5Ñ$5Ò5Ø )§¡Ó 1ò L‘��fØ(.¯©«ò LÑ$�K Ø,0�DÜ! # b¡'¬5Ô1Ø # B¡¨¡
˜Ø" 2™w q™z™à # B¡˜Ø˜4×+Ñ+¨D°+¸uÀdÓKÑK‘CñLðLð �4‰KˆCà˜Ÿ™Ñ#¨Ò)¨T¯[©[¸AÒ-=Ü×-Ñ-¨cÔ2Ø#�”ð ð  #�”Ør"   c                 óž   — t        j                  «       | j                  k(  r+| j                  �t        j                  | j                  «       |S r   )r   ré   rß   rà   rê   r%   s     r    r)   z EvaluationMonitor.after_training,  s9   € Ü×ÑÓ  D×$5Ñ$5Ò5¸$¿,¹,Ð:RÜ×)Ñ)¨$¯,©,Ô7Øˆr"   )r   r   F)r1   r2   r3   r4   r9   r:   r!   r5   rH   r   rä   r8   r   r7   r0   r)   r¨   r©   s   @r    r   r   ï  s™   ø„ ññ˜Sð ¨cð À$ð ÐSWõ ðØðØ!$ðØ-2ðØ9AÀ%¹ðà	óðØðØ$'ðØ4D×4MÑ4Mðà	óð6 Fð ¨v÷ r"   r   c                   óž   ‡ — e Zd ZdZdZ	 	 	 ddeeej                  f   dede	de
dd	f
ˆ fd
„Zdedefd„Zdede
dej                  de	fd„Zˆ xZS )r   ak  Checkpointing operation. Users are encouraged to create their own callbacks for
    checkpoint as XGBoost doesn't handle distributed file systems. When checkpointing on
    distributed systems, be sure to know the rank of the worker to avoid multiple
    workers checkpointing to the same place.

    .. versionadded:: 1.3.0

    Since XGBoost 2.1.0, the default format is changed to UBJSON.

    Parameters
    ----------

    directory :
        Output model directory.
    name :
        pattern of output model file.  Models will be saved as name_0.ubj, name_1.ubj,
        name_2.ubj ....
    as_pickle :
        When set to True, all training parameters will be saved in pickle format,
        instead of saving only the model.
    interval :
        Interval of checkpointing.  Checkpointing is slow so setting a larger number can
        reduce performance hit.

    Úubjr#   Ú	directoryr[   Ú	as_pickleÚintervalr   Nc                 óœ   •— t        j                  |«      | _        || _        || _        || _        d| _        d| _        t        ‰| �%  «        y r?   )
ÚosÚfspathÚ_pathÚ_nameÚ
_as_pickleÚ_iterationsÚ_epochÚ_startr£   r!   )r   rð   r[   rñ   rò   r¤   s        €r    r!   zTrainingCheckPoint.__init__O  sD   ø€ ô —Y‘Y˜yÓ)ˆŒ
ØˆŒ
Ø#ˆŒØ#ˆÔØˆŒØˆŒÜ‰ÑÕr"   c                 ó0   — |j                  «       | _        |S r   )r·   rû   r%   s     r    r&   z"TrainingCheckPoint.before_training^  s   € Ø×.Ñ.Ó0ˆŒØˆr"   r*   r+   c                 ó"  — | j                   | j                  k(  rÕt        j                  j	                  | j
                  | j                  dz   t        || j                  z   «      z   | j                  rdnd| j                  › �z   «      }d| _         t        j                  «       dk(  rI| j                  r,t        |d«      5 }t        j                  ||«       d d d «       n|j!                  |«       | xj                   dz  c_         y# 1 sw Y   ŒxY w)NrZ   z.pklú.r   Úwbr   F)rú   rù   rô   ÚpathrŒ   rö   r÷   r5   rû   rø   Údefault_formatr   ré   ÚopenÚpickleÚdumpÚ
save_model)r   r#   r*   r+   r   Úfds         r    r0   z"TrainingCheckPoint.after_iterationb  së   € ð �;‰;˜$×*Ñ*Ò*Ü—7‘7—<‘<Ø—
‘
Ø—
‘
Øñä�u˜tŸ{™{Ñ*Ó+ñ-ð "Ÿ_š_‘6°A°d×6IÑ6IÐ5JÐ2KñMóˆDð ˆDŒKÜ×"Ñ"Ó$¨Ò)à—?’?Ü˜d DÓ)ð /¨RÜŸ™ E¨2Ô.÷/ð /ð ×$Ñ$ TÔ*Ø�Š�qÑ�Ø÷/ð /ús   Â>DÄD)r#   Féd   )r1   r2   r3   r4   r  r   r5   rô   ÚPathLiker:   r9   r!   r8   r&   r   r7   r0   r¨   r©   s   @r    r   r   2  s›   ø„ ñð4 €Nð
 ØØñà˜˜bŸk™kÐ)Ñ*ðð ðð ð	ð
 ðð 
õð Vð °ó ðØðØ$'ðØ4D×4MÑ4Mðà	÷r"   r   )(r4   rs   rô   r  r¡   r   Útypingr   r   r   r   r   r	   r
   r   r   r   rK   Ú r   Úcorer   r   r   r   Ú__all__rH   rÎ   r6   r8   r   r5   r^   r_   ri   r   r   r   r   r   r   r"   r    ú<module>r     s  ðñó
 Û 	Û Ý ÷÷ ÷ ó å ß AÓ Aò€ð 
ˆu�e˜E 5˜LÑ)Ð)Ñ	*€Ø�4˜‘;  U¨5°%¨<Ñ%8Ñ 9Ð9Ñ:€
à	€ô.�sô .ðb�$�s‘)ð   U¨3°°uÐ+<Ñ%=Ñ >ó ñ6 ˆvƒ€ð˜Tð  dó ÷&xñ xôv%Ð,ô %ôRzÐ$ô zôz@Ð(ô @ôFDÐ)õ Dr"   