Ë
    :�DjòT  ã            ,       óÒ  — d Z ddlZddlZddlZddl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mZmZ ddlmZmZmZmZ ddlmZmZmZ ddlmZmZm Z m!Z!m"Z"m#Z# e
d	   Z$d
e	e    de	e    de	e    fd„Z%e#	 d0dddddddddddœ
dee&ef   dede'de	e
eee&f         de	e!   d
e	e    de	e(   de	e'   de	ejR                     de	ee(e'f      de	ee&ejT                  ee+f      de	e
e      de	e    defd„«       Z, G d„ d	«      Z- G d„ d«      Z.deej^                     d ej^                  dej^                  fd!„Z0	 	 	 d1d"ed#e'd$ede
e&   d%e	e   d&e(dee-   fd'„Z1	 	 	 	 	 d2d"ed#e'd$ed(e'de
e&   d%e	e   d)e	e(   d*e	e   d&e(dee-   fd+„Z2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d3dedede'd#e'd)e(d*ed,e
e&   de	e!   d
e	e    de	e(   de	e'   d%e	e   d-e(de	ee'e(f      d.e(d(e'de	e
e      d&e(de	e    deee&e3f   ef   f(d/„Z4y)4z.Training Library containing training routines.é    N)	ÚAnyÚDictÚIterableÚListÚOptionalÚSequenceÚTupleÚUnionÚcasté   )ÚBoosterParamÚCallableÚFPreProcCallable)ÚCallbackContainerÚEarlyStoppingÚEvaluationMonitorÚTrainingCallback)ÚSKLEARN_INSTALLEDÚ	DataFrameÚXGBStratifiedKFold)ÚBoosterÚDMatrixÚMetricÚ	ObjectiveÚXGBoostErrorÚ_deprecate_positional_argsÚCVPackÚfevalÚcustom_metricÚreturnc                 ón   — | �d}t        j                  d|› d�«       | �|�t        d«      ‚|�|}|S | }|S )NzIhttps://xgboost.readthedocs.io/en/latest/tutorials/custom_metric_obj.htmlzy`feval` is deprecated, use `custom_metric` instead.  They have different behavior when custom objective is also used.See z$ for details on the `custom_metric`.zLBoth `feval` and `custom_metric` are supplied.  Use `custom_metric` instead.)ÚwarningsÚwarnÚ
ValueError)r   r   ÚlinkÚeval_metrics       úTC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\xgboost/training.pyÚ_configure_custom_metricr(      sp   € ð ÐàWð 	ô 	�‰ðà�&Ð<ð>ô	
ð
 Ð˜]Ð6ÜØZó
ð 	
ð $1Ð#<�-€KØÐð CH€KØÐó    T)
ÚevalsÚobjr   ÚmaximizeÚearly_stopping_roundsÚevals_resultÚverbose_evalÚ	xgb_modelÚ	callbacksr   ÚparamsÚdtrainÚnum_boost_roundr*   r+   r,   r-   r.   r/   r0   r1   c       
   	      óÐ  — |€g nt        j                   t        |«      «      }t        ||«      }|rt        |«      ng }t        | |g|D �cg c]  }|d   ‘Œ	 c}z   |
¬«      }d}|	r#|	du rdn|	}	|j	                  t        |	¬«      «       |r|j	                  t        ||¬«      «       t        ||t        |«      xs ||u ¬«      }|j                  |«      }t        ||«      D ]B  }|j                  ||||«      r n,|j                  |||¬«       |j                  ||||«      sŒB n |j                  |«      }|�|j                  |j                  «       |j                  «       S c c}w )	aÚ  Train a booster with given parameters.

    Parameters
    ----------
    params :
        Booster params.
    dtrain :
        Data to be trained.
    num_boost_round :
        Number of boosting iterations.
    evals :
        List of validation sets for which metrics will evaluated during training.
        Validation metrics will help us track the performance of the model.
    obj
        Custom objective function.  See :doc:`Custom Objective
        </tutorials/custom_metric_obj>` for details.
    feval :
        .. deprecated:: 1.6.0
            Use `custom_metric` instead.
    maximize :
        Whether to maximize feval.
    early_stopping_rounds :
        Activates early stopping. Validation metric needs to improve at least once in
        every **early_stopping_rounds** round(s) to continue training.
        Requires at least one item in **evals**.
        The method returns the model from the last iteration (not the best one).  Use
        custom callback or model slicing if the best model is desired.
        If there's more than one item in **evals**, the last entry will be used for early
        stopping.
        If there's more than one metric in the **eval_metric** parameter given in
        **params**, the last metric will be used for early stopping.
        If early stopping occurs, the model will have two additional fields:
        ``bst.best_score``, ``bst.best_iteration``.
    evals_result :
        This dictionary stores the evaluation results of all the items in watchlist.

        Example: with a watchlist containing
        ``[(dtest,'eval'), (dtrain,'train')]`` and
        a parameter containing ``('eval_metric': 'logloss')``,
        the **evals_result** returns

        .. code-block:: python

            {'train': {'logloss': ['0.48253', '0.35953']},
             'eval': {'logloss': ['0.480385', '0.357756']}}

    verbose_eval :
        Requires at least one item in **evals**.
        If **verbose_eval** is True then the evaluation metric on the validation set is
        printed at each boosting stage.
        If **verbose_eval** is an integer then the evaluation metric on the validation set
        is printed at every given **verbose_eval** boosting stage. The last boosting stage
        / the boosting stage found by using **early_stopping_rounds** is also printed.
        Example: with ``verbose_eval=4`` and at least one item in **evals**, an evaluation metric
        is printed every 4 boosting stages, instead of every boosting stage.
    xgb_model :
        Xgb model to be loaded before training (allows training continuation).
    callbacks :
        List of callback functions that are applied at end of each iteration.
        It is possible to use predefined callbacks by using
        :ref:`Callback API <callback_api>`.

        .. note::

           States in callback are not preserved during training, which means callback
           objects can not be reused for multiple training sessions without
           reinitialization or deepcopy.

        .. code-block:: python

            for params in parameters_grid:
                # be sure to (re)initialize the callbacks before each run
                callbacks = [xgb.callback.LearningRateScheduler(custom_rates)]
                xgboost.train(params, Xy, callbacks=callbacks)

    custom_metric:

        .. versionadded 1.6.0

        Custom metric function.  See :doc:`Custom Metric </tutorials/custom_metric_obj>`
        for details.

    Returns
    -------
    Booster : a trained booster model
    r   )Ú
model_fileTr   )Úperiod©Úroundsr,   )ÚmetricÚoutput_margin)Ú	iterationÚfobj)ÚcopyÚlistr(   r   Úappendr   r   r   ÚcallableÚbefore_trainingÚrangeÚbefore_iterationÚupdateÚafter_iterationÚafter_trainingÚhistory)r2   r3   r4   r*   r+   r   r,   r-   r.   r/   r0   r1   r   Ú	metric_fnÚdÚbstÚstart_iterationÚcb_containerÚis                      r'   ÚtrainrO   3   si  € ðP  Ð'‘¬T¯Y©Y´t¸I³Ó-G€IÜ(¨°Ó>€IÙ ŒD�ŒK b€Eä
�&˜6˜(°EÖ%:¨q a¨£dÒ%:Ñ:ÀyÔ
Q€CØ€OáØ(¨DÑ0‘q°lˆØ×ÑÔ*°,Ô?Ô@ÙØ×ÑœÐ.CÈhÔWÔXÜ$ØØô ˜s“mÒ9 y°EÐ'9ô€Lð ×
&Ñ
& sÓ
+€Cä�? OÓ4ò ˆØ×(Ñ(¨¨a°¸Ô?ÙØ�
‰
�6 Q¨Sˆ
Ô1Ø×'Ñ'¨¨Q°¸Õ>Ùðð ×
%Ñ
% cÓ
*€CàÐØ×Ñ˜L×0Ñ0Ô1ð �8‰8‹:ÐùòC &;s   Á
E#c            	       ó€   — e Zd ZdZdededeeeef      ddfd„Z	de
defd	„Zd
edee   ddfd„Zd
edee   dede
fd„Zy)r   z. "Auxiliary datastruct to hold one fold of CV.r3   ÚdtestÚparamr    Nc                 ó`   — || _         || _        |df|dfg| _        t        |||g«      | _        y)z "Initialize the CVPackrO   ÚtestN)r3   rQ   Ú	watchlistr   rK   )Úselfr3   rQ   rR   s       r'   Ú__init__zCVPack.__init__Æ   s9   € ð ˆŒØˆŒ
Ø! 7Ð+¨e°V¨_Ð=ˆŒÜ˜5 6¨5 /Ó2ˆ�r)   Únamec                 ó<   ‡ ‡— dt         dt         dt         fˆˆ fd„}|S )NÚargsÚkwargsr    c                  ó<   •—  t        ‰j                  ‰«      | i |¤ŽS ©N)ÚgetattrrK   )rZ   r[   rX   rV   s     €€r'   Ú_innerz"CVPack.__getattr__.<locals>._innerÐ   s    ø€ Ø*”7˜4Ÿ8™8 TÓ*¨DÐ;°FÑ;Ð;r)   )r   )rV   rX   r_   s   `` r'   Ú__getattr__zCVPack.__getattr__Ï   s$   ù€ ð	<œ#ð 	<¬ð 	<´ö 	<ð ˆr)   r<   r=   c                 óR   — | j                   j                  | j                  ||«       y)z' "Update the boosters for one iterationN)rK   rE   r3   )rV   r<   r=   s      r'   rE   zCVPack.updateÕ   s   € à�‰�‰˜Ÿ™ Y°Õ5r)   r   r;   c                 óR   — | j                   j                  | j                  |||«      S )z( "Evaluate the CVPack for one iteration.)rK   Úeval_setrU   )rV   r<   r   r;   s       r'   ÚevalzCVPack.evalÙ   s!   € à�x‰x× Ñ  §¡°¸EÀ=ÓQÐQr)   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r
   r   r   rW   Ústrr   r`   Úintr   rE   r   Úboolrd   © r)   r'   r   r   Ã   s–   „ Ù8ð3Øð3Ø&-ð3Ø6>¸uÀTÈ4ÀZÑ?PÑ6Qð3à	ó3ð ð ¨ó ð6 ð 6¨8°IÑ+>ð 6À4ó 6ðR˜cð R¨(°6Ñ*:ð RÈ4ð RÐTWô Rr)   c            	       óT  — e Zd Zdeddfd„Zdedee   ddfd„Zdedee	   d	e
dee   fd
„Zdee   defd„Zdedee   fd„Z	 ddeeeeeef      ef   dee   ddfd„Zdefd„Zedefd„«       Zej2                  deddfd„«       Zedefd„«       Zej2                  deddfd„«       Zy)Ú_PackedBoosterÚcvfoldsr    Nc                 ó   — || _         y r]   )ro   )rV   ro   s     r'   rW   z_PackedBooster.__init__ß   s	   € Øˆ�r)   r<   r+   c                 óJ   — | j                   D ]  }|j                  ||«       Œ y)z Iterate through folds for updateN)ro   rE   )rV   r<   r+   Úfolds       r'   rE   z_PackedBooster.updateâ   s#   € à—L‘Lò 	(ˆDØ�K‰K˜	 3Õ'ñ	(r)   r   r;   c                 ód   — | j                   D �cg c]  }|j                  |||«      ‘Œ }}|S c c}w )zIterate through folds for eval)ro   rd   )rV   r<   r   r;   ÚfÚresults         r'   rd   z_PackedBooster.evalç   s5   € ð DHÇ<Á<ÖP¸a�!—&‘&˜ E¨=Õ9ÐPˆÐPØˆùò Qs   �-r[   c                 ó^   — | j                   D ]  } |j                  j                  di |¤Ž Œ  y)z,Iterate through folds for setting attributesNrl   )ro   rK   Úset_attr)rV   r[   rt   s      r'   rw   z_PackedBooster.set_attrî   s*   € à—‘ò 	%ˆAØˆA�E‰E�N‰NÑ$˜VÓ$ñ	%r)   Úkeyc                 óR   — | j                   d   j                  j                  |«      S )zRedirect to booster attr.r   )ro   rK   Úattr)rV   rx   s     r'   rz   z_PackedBooster.attró   s!   € à�|‰|˜A‰×"Ñ"×'Ñ'¨Ó,Ð,r)   r2   Úvaluec                 ó^   — | j                   D ]  }|j                  j                  ||«       Œ  y)z#Iterate through folds for set_paramN)ro   rK   Ú	set_param)rV   r2   r{   rt   s       r'   r}   z_PackedBooster.set_param÷   s)   € ð —‘ò 	+ˆAØ�E‰E�O‰O˜F EÕ*ñ	+r)   c                 ó<   — | j                   d   j                  «       S )zNumber of boosted rounds.r   )ro   Únum_boosted_rounds©rV   s    r'   r   z!_PackedBooster.num_boosted_rounds   s   € à�|‰|˜A‰×1Ñ1Ó3Ð3r)   c                 ó€   — t        t        t         | j                  d   j                  j	                  d«      «      «      S )úGet best_iterationr   Úbest_iteration)rj   r   ro   rK   rz   r€   s    r'   rƒ   z_PackedBooster.best_iteration  s0   € ô ”4œ˜TŸ\™\¨!™_×0Ñ0×5Ñ5Ð6FÓGÓHÓIÐIr)   c                 ó(   — | j                  |¬«       y)r‚   )rƒ   N©rw   )rV   r<   s     r'   rƒ   z_PackedBooster.best_iteration	  s   € ð 	�‰ YˆÕ/r)   c                 ó€   — t        t        t         | j                  d   j                  j	                  d«      «      «      S )zGet best_score.r   Ú
best_score)Úfloatr   ro   rK   rz   r€   s    r'   r‡   z_PackedBooster.best_score  s/   € ô ”Tœ% §¡¨a¡×!4Ñ!4×!9Ñ!9¸,Ó!GÓHÓIÐIr)   Úscorec                 ó(   — | j                  |¬«       y )N)r‡   r…   )rV   r‰   s     r'   r‡   z_PackedBooster.best_score  s   € à�‰ ˆÕ'r)   r]   )re   rf   rg   Ú_CVFoldsrW   rj   r   r   rE   r   rk   r   ri   rd   r   rw   rz   r
   r   r   r	   r}   r   Úpropertyrƒ   Úsetterrˆ   r‡   rl   r)   r'   rn   rn   Þ   sk  „ ð ð ¨Tó ð( ð (¨(°9Ñ*=ð (À$ó (ð
ØðØ%-¨fÑ%5ðØFJðà	ˆc‰óð% ¨#¡ð %°3ó %ð
-˜ð - ¨¡ó -ð  $ñ+à�d˜H U¨3°¨8¡_Ñ5°sÐ:Ñ;ð+ð ˜‰}ð+ð 
ó	+ð4 Có 4ð ðJ ò Jó ðJð ×Ñð0¨ð 0°ò 0ó ð0ð ðJ˜Eò Jó ðJð ×Ñð( ð (¨$ò (ó ñ(r)   rn   ÚgroupsÚ
boundariesc                 óŒ   — t        j                  | D �cg c]!  }t        j                  ||   ||dz      «      ‘Œ# c}«      S c c}w )zÊ
    Given group row boundaries, convert ground indexes to row indexes
    :param groups: list of groups for testing
    :param boundaries: rows index limits of each group
    :return: row in group
    r   )ÚnpÚconcatenateÚarange)rŽ   r�   Úgs      r'   Úgroups_to_rowsr•     s:   € ô �>‰>ÐPVÖWÈ1œ2Ÿ9™9 Z°¡]°J¸qÀ1¹uÑ4EÕFÒWÓXÐXùÒWs   ”&AÚdallÚnfoldrR   ÚfpreprocÚshufflec                 óð  — | j                  d«      }t        j                  |«      }|du r)t        j                  j	                  t        |«      «      }nt        j                  t        |«      «      }t        j                  ||«      }	t        |«      D �
�cg c]7  }
t        j                  t        |«      D �cg c]  }|
|k7  sŒ	|	|   ‘Œ c}«      ‘Œ9 }}
}|D �cg c]  }t        ||«      ‘Œ }}|	D �cg c]  }t        ||«      ‘Œ }}g }t        |«      D ]Å  }
| j                  ||
   d¬«      }|j                  |||
      «       | j                  ||
   d¬«      }|j                  ||	|
      «       |� ||||j                  «       «      \  }}}n|}t        |j                  «       «      |D �cg c]  }d|f‘Œ c}z   }|j!                  t#        |||«      «       ŒÇ |S c c}w c c}}
w c c}w c c}w c c}w )zb
    Make n folds for cross-validation maintaining groups
    :return: cross-validation folds
    Ú	group_ptrT)Úallow_groupsr&   )Úget_uint_infor‘   ÚdiffÚrandomÚpermutationÚlenr“   Úarray_splitrC   r’   r•   ÚsliceÚ	set_groupr>   r?   Úitemsr@   r   )r–   r—   rR   r*   r˜   r™   Úgroup_boundariesÚgroup_sizesÚidxÚout_group_idsetÚkrN   Úin_group_idsetÚ	in_groupsÚin_idsetÚ
out_groupsÚ	out_idsetÚretr3   rQ   ÚtparamÚitmÚplsts                          r'   Úmkgroupfoldr´   "  sï  € ð ×)Ñ)¨+Ó6ÐÜ—'‘'Ð*Ó+€Kà�$�Ü�i‰i×#Ñ#¤C¨Ó$4Ó5‰ä�i‰iœ˜KÓ(Ó)ˆä—n‘n S¨%Ó0€Oô �u“÷àô 	�‰´E¸%³LÖK¨qÀAÈÃF˜¨Ó*ÒKÕLð€Nñ ð FTöØ8AŒ�yÐ"2Õ3ð€Hð ð HWöØ9CŒ�zÐ#3Õ4ð€Ið ð
 €CÜ�5‹\ò 0ˆà—‘˜H Q™K°d�Ó;ˆØ×Ñ˜ ^°AÑ%6Ñ7Ô8Ø—
‘
˜9 Q™<°d�
Ó;ˆØ�‰˜ O°AÑ$6Ñ7Ô8àÐÙ$,¨V°U¸E¿J¹J»LÓ$IÑ!ˆF�E™6àˆFÜ�F—L‘L“NÓ#ÀuÖ&MÀ¨°sÒ';Ò&MÑMˆØ�
‰
”6˜& %¨Ó.Õ/ð0ð €Jùò5 Lùóùò
ùòùò" 'Ns0   Â!G#Â7
GÃGÃ		G#ÃG)Ã2G.Æ.G3ÇG#ÚseedÚ
stratifiedÚfoldsc	                 ó  — t        |«      }t        j                  j                  |«       |du ré|€çt	        | j                  d«      «      dkD  rt        | |||||¬«      S |du r.t        j                  j                  | j                  «       «      }	n#t        j                  | j                  «       «      }	t        j                  |	|«      }
t        |«      D ��cg c]7  }t        j                  t        |«      D �cg c]  }||k7  sŒ	|
|   ‘Œ c}«      ‘Œ9 }}}n¨|�1	 |D �cg c]  }|d   ‘Œ	 }}|D �cg c]  }|d   ‘Œ	 }
}t	        |
«      }nut!        |d|¬«      }t        |j                  | j                  «       | j                  «       ¬«      «      }|D �cg c]  }|d   ‘Œ	 }}|D �cg c]  }|d   ‘Œ	 }
}t	        |
«      }g }t        |«      D ]“  }| j#                  ||   «      }| j#                  |
|   «      }|� ||||j%                  «       «      \  }}}n|}t        |j'                  «       «      |D �cg c]  }d	|f‘Œ c}z   }|j)                  t+        |||«      «       Œ• |S c c}w c c}}w c c}w c c}w # t        $ rl t        |j                  | j                  «       | j                  «       ¬«      «      }|D �cg c]  }|d   ‘Œ	 nc c}w }}|D �cg c]  }|d   ‘Œ	 nc c}w }
}Y �Œ¯w xY wc c}w c c}w c c}w )
z<
    Make an n-fold list of CVPack from random indices.
    Fr›   r   )r*   r˜   r™   Tr   )ÚXÚy)Ún_splitsr™   Úrandom_stater&   )r?   r‘   rŸ   rµ   r¡   r�   r´   r    Únum_rowr“   r¢   rC   r’   Ú	TypeErrorÚsplitÚ	get_labelr   r£   r>   r¥   r@   r   )r–   r—   rR   rµ   r*   r˜   r¶   r·   r™   r¨   r¯   rª   rN   r­   ÚxÚsplitsÚsfkr°   r3   rQ   r±   r²   r³   s                          r'   ÚmknfoldrÄ   W  sÅ  € ô �‹K€EÜ‡I�I‡N�N�4Ôà�UÑ˜u˜}äˆt×!Ñ! +Ó.Ó/°!Ò3ÜØ�e˜U¨%¸(ÈGôð ð �d‰?Ü—)‘)×'Ñ'¨¯©«Ó7‰Cä—)‘)˜DŸL™L›NÓ+ˆCÜ—N‘N 3¨Ó.ˆ	ô ˜5“\÷
àô �N‰N´%¸³,ÖI¨QÀ!ÀqÃ&˜I a›LÒIÕJð
ˆò 
ð 
Ð	ð	/Ø&+Ö, ˜˜!›Ð,ˆHÐ,Ø',Ö- !˜˜1›Ð-ˆIÐ-ô �I“‰ô !¨%¸ÈDÔQˆÜ�c—i‘i $§.¡.Ó"2°d·n±nÓ6F�iÓGÓHˆØ"(Ö)˜Q�A�a“DÐ)ˆÐ)Ø#)Ö*˜a�Q�q“TÐ*ˆ	Ð*Ü�I“ˆà
€CÜ�5‹\ò 
0ˆà—‘˜H Q™KÓ(ˆØ—
‘
˜9 Q™<Ó(ˆàÐÙ$,¨V°U¸E¿J¹J»LÓ$IÑ!ˆF�E™6àˆFÜ�F—L‘L“NÓ#ÀuÖ&MÀ¨°sÒ';Ò&MÑMˆØ�
‰
”6˜& %¨Ó.Õ/ð
0ð €JùòE Jùó
ùò -ùÚ-øÜò 	/ä˜%Ÿ+™+¨¯©Ó(8¸D¿N¹NÓ<L˜+ÓMÓNˆFØ&,Ö- ˜˜!›Ñ-ùÒ-ˆHÐ-Ø'-Ö. !˜˜1›Ñ.ùÒ.ˆIÓ.ð		/üò *ùÚ*ùò 'Nsy   Ã!I*Ã9
I%ÄI%Ä	I*ÄI: ÄI0Ä+I: Ä1I5Ä=I: ÆK2Æ'K7È5K<É%I*É0
I: É:AK/Ê?KËK/ËK$Ë#K/Ë.K/ÚmetricsÚ	as_pandasÚ	show_stdvc                 ó€  — |du rt         st        d«      ‚t        |t        «      r|g}| j	                  «       } t        | t
        «      r/| D �cg c]  }|d   dk(  sŒ|d   ‘Œ }}t        | «      } d| v r|| d<   |s#d| v rt        | d   t
        «      r| d   }n| d   g}| j                  dd«       i }t        ||| ||||||«	      }t        ||«      }|€g nt	        j                  t        |«      «      }|r$|du rdn|}|j                  t        ||¬«      «       |
r|j                  t        |
|	¬«      «       t        ||dt        |«      xs ||u ¬	«      }t        |«      }|j!                  |«       t#        |«      D ]ù  }|j%                  |||d«      r nã|j'                  ||«       |j)                  |||d«      }|j*                  }t-        t.        t0        t        t2        t2        f      |«      D ]R  \  }}}|d
z   |vrg ||d
z   <   |dz   |vrg ||dz   <   ||d
z      j                  |«       ||dz      j                  |«       ŒT |sŒÌ|j5                  «       D ]  } ||    d|j6                  dz    || <   Œ  n |r 	 ddl}!|!j:                  j=                  |«      }|jA                  |«       |S c c}w # t>        $ r Y Œ#w xY w)aí  Cross-validation with given parameters.

    Parameters
    ----------
    params : dict
        Booster params.
    dtrain : DMatrix
        Data to be trained.
    num_boost_round : int
        Number of boosting iterations.
    nfold : int
        Number of folds in CV.
    stratified : bool
        Perform stratified sampling.
    folds : a KFold or StratifiedKFold instance or list of fold indices
        Sklearn KFolds or StratifiedKFolds object.
        Alternatively may explicitly pass sample indices for each fold.
        For ``n`` folds, **folds** should be a length ``n`` list of tuples.
        Each tuple is ``(in,out)`` where ``in`` is a list of indices to be used
        as the training samples for the ``n`` th fold and ``out`` is a list of
        indices to be used as the testing samples for the ``n`` th fold.
    metrics : string or list of strings
        Evaluation metrics to be watched in CV.
    obj :

        Custom objective function.  See :doc:`Custom Objective
        </tutorials/custom_metric_obj>` for details.

    feval : function
        .. deprecated:: 1.6.0
            Use `custom_metric` instead.
    maximize : bool
        Whether to maximize feval.
    early_stopping_rounds: int
        Activates early stopping. Cross-Validation metric (average of validation
        metric computed over CV folds) needs to improve at least once in
        every **early_stopping_rounds** round(s) to continue training.
        The last entry in the evaluation history will represent the best iteration.
        If there's more than one metric in the **eval_metric** parameter given in
        **params**, the last metric will be used for early stopping.
    fpreproc : function
        Preprocessing function that takes (dtrain, dtest, param) and returns
        transformed versions of those.
    as_pandas : bool, default True
        Return pd.DataFrame when pandas is installed.
        If False or pandas is not installed, return np.ndarray
    verbose_eval : bool, int, or None, default None
        Whether to display the progress. If None, progress will be displayed
        when np.ndarray is returned. If True, progress will be displayed at
        boosting stage. If an integer is given, progress will be displayed
        at every given `verbose_eval` boosting stage.
    show_stdv : bool, default True
        Whether to display the standard deviation in progress.
        Results are not affected, and always contains std.
    seed : int
        Seed used to generate the folds (passed to numpy.random.seed).
    callbacks :
        List of callback functions that are applied at end of each iteration.
        It is possible to use predefined callbacks by using
        :ref:`Callback API <callback_api>`.

        .. note::

           States in callback are not preserved during training, which means callback
           objects can not be reused for multiple training sessions without
           reinitialization or deepcopy.

        .. code-block:: python

            for params in parameters_grid:
                # be sure to (re)initialize the callbacks before each run
                callbacks = [xgb.callback.LearningRateScheduler(custom_rates)]
                xgboost.train(params, Xy, callbacks=callbacks)

    shuffle : bool
        Shuffle data before creating folds.
    custom_metric :

        .. versionadded 1.6.0

        Custom metric function.  See :doc:`Custom Metric </tutorials/custom_metric_obj>`
        for details.

    Returns
    -------
    evaluation history : list(string)
    Tz;sklearn needs to be installed in order to use stratified cvr   r&   r   N)r7   rÇ   r8   )r:   Úis_cvr;   z-meanz-std)!r   r   Ú
isinstanceri   r>   r?   ÚdictÚpoprÄ   r(   r@   r   r   r   rA   rn   rB   rC   rD   rE   rF   Úaggregated_cvr   r   r	   rˆ   Úkeysrƒ   Úpandasr   Ú	from_dictÚImportErrorrG   )"r2   r3   r4   r—   r¶   r·   rÅ   r+   r   r,   r-   r˜   rÆ   r/   rÇ   rµ   r1   r™   r   rÁ   Ú_metricsÚresultsro   rI   Úcallbacks_containerÚboosterrN   Úshould_breakÚresrx   ÚmeanÚstdrª   Úpds"                                     r'   ÚcvrÛ   š  s  € ðZ �TÑÕ"3ÜØIó
ð 	
ô �'œ3ÔØ�)ˆà�[‰[‹]€FÜ�&œ$ÔØ"(ÖB˜Q¨A¨a©D°MÓ,A�A�a“DÐBˆÐBÜ�f“ˆØ˜FÑ"Ø$,ˆF�=Ñ!á˜¨&Ñ0Ü�f˜]Ñ+¬TÔ2Ø˜]Ñ+‰Gà˜mÑ,Ð-ˆGà
‡J�Jˆ}˜dÔ#à&(€GÜØ��v˜t W¨h¸
ÀEÈ7ó€Gô )¨°Ó>€Ið  Ð'‘¬T¯Y©Y´t¸I³Ó-G€IáØ(¨DÑ0‘q°lˆØ×ÑÔ*°,È)ÔTÔUÙØ×ÑœÐ.CÈhÔWÔXÜ+ØØØÜ˜s“mÒ9 y°EÐ'9ô	Ðô ˜WÓ%€GØ×'Ñ'¨Ô0ä�?Ó#ò ˆØ×/Ñ/°¸¸FÀDÔIÙØ�‰�q˜#Ôà*×:Ñ:¸7ÀAÀvÈtÓTˆØ!×/Ñ/ˆÜ"¤4¬¬c´5¼%Ð.?Ñ(@Ñ#AÀ3ÓGò 	.‰NˆC��sØ�W‰} GÑ+Ø)+�˜˜g™Ñ&Ø�V‰| 7Ñ*Ø(*�˜˜f™Ñ%Ø�C˜'‘MÑ"×)Ñ)¨$Ô/Ø�C˜&‘LÑ!×(Ñ(¨Õ-ð	.ò Ø—\‘\“^ò H�Ø$ Q™ZÐ(F¨7×+AÑ+AÀAÑ+EÐG�˜’
ðHáð%ñ& ð	Ûà—l‘l×,Ñ,¨WÓ5ˆGð ×&Ñ& wÔ/à€NùòG Cøô| ò 	Ùð	ús   ÁJ,ÁJ,É:J1 Ê1	J=Ê<J=)é
   )rl   NT)rl   NFNT)rÜ   é   FNrl   NNNNNTNTr   NTN)5rh   r>   Úosr"   Útypingr   r   r   r   r   r   r	   r
   r   Únumpyr‘   Ú_typingr   r   r   Úcallbackr   r   r   r   Úcompatr   r   r   Úcorer   r   r   r   r   r   r‹   r(   ri   rj   rk   ÚEvalsLogÚPathLikeÚ	bytearrayrO   r   rn   Úndarrayr•   r´   rÄ   rˆ   rÛ   rl   r)   r'   ú<module>ré      sa  ðñ 5Û Û 	Û ß T× TÕ Tã ç =Ñ =÷ó ÷ EÑ D÷÷ ð �HÑ€ðØ�FÑðØ,4°VÑ,<ðàˆfÑóð( ð ðLð
 6:Ø#Ø"Ø#Ø+/Ø8<Ø/3ØGKØ6:Ø&*òLØ��c�‰NðLàðLð ðLð
 �H˜U 7¨C <Ñ0Ñ1Ñ2ðLð 
�)Ñ	ðLð �FÑðLð �t‰nðLð $ C™=ðLð Ð+×4Ñ4Ñ5ðLð ˜5  s Ñ+Ñ,ðLð ˜˜c 2§;¡;°¸ÐBÑCÑDðLð ˜Ð!1Ñ2Ñ3ðLð ˜FÑ#ðLð òLó ðL÷^Rñ R÷67(ñ 7(ðtY˜4 §
¡
Ñ+ð Y¸¿¹ð YÈÏ
É
ó Yð Ø+/Øñ2Ø
ð2àð2ð ð2ð �C‰=ð	2ð
 Ð'Ñ(ð2ð ð2ð 
ˆ&�\ó2ðt Ø+/Ø!&Ø*.Øñ@Ø
ð@àð@ð ð@ð ð	@ð
 �C‰=ð@ð Ð'Ñ(ð@ð ˜‘ð@ð Ð&Ñ'ð@ð ð@ð 
ˆ&�\ó@ðL ØØØ $ØØ#Ø"Ø#Ø+/Ø+/ØØ/3ØØØ6:ØØ&*ñ'zØðzàðzð ðzð ð	zð
 ðzð ðzð �c‰]ðzð 
�)Ñ	ðzð �FÑðzð �t‰nðzð $ C™=ðzð Ð'Ñ(ðzð ðzð ˜5  d Ñ+Ñ,ðzð ðzð  ð!zð" ˜Ð!1Ñ2Ñ3ð#zð$ ð%zð& ˜FÑ#ð'zð( ˆ4��U�
Ñ˜YÐ&Ñ'ô)zr)   