o
    Ú­j<  ã                   @   sÂ   d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZmZ ddlmZmZ d	d
lmZ dededededdf
dd„Zdeeeef  fdd„Zdedededededdfdd„ZdS )zTests for callback functions.é    N)Úproduct)ÚDictÚListÚTupleé   )ÚLearningRateScheduler)ÚBoosterÚDMatrix)ÚcvÚtrainé   )ÚDeviceÚtree_methodÚdtrainÚdtestÚdeviceÚreturnc                 C   s  t }|df|dfg}d}dddd| |dœ}i }t|||||g d	¢ƒg|d
�}	ttt|d d ƒƒ}
t|	tƒs8J ‚|
d |
d ksBJ ‚dddd| |dœ}i }t|||||g d	¢ƒg|d
�}	ttt|d d ƒƒ}t|	tƒsnJ ‚|d |d ksxJ ‚ddd| |dœ}i }t|||||g d¢ƒg|d
�}	ttt|d d ƒƒ}t|	tƒs£J ‚|d |d ks­J ‚|fdtdtdtfdd„}i }t||||||ƒg|d
�}	ttt|d d ƒƒ}t|	tƒsÛJ ‚|d |d ksåJ ‚tdt	|
ƒƒD ]}|| || ksøJ ‚qìt
|||||ƒgd� dS )z=Test learning rate scheduler, used by both CPU and GPU tests.Úevalr   é   r   r   úbinary:logisticÚerror)Ú	max_depthÚetaÚ	objectiveÚeval_metricr   r   )gš™™™™™é?gffffffæ?g333333ã?g      à?)ÚevalsÚ	callbacksÚevals_resultéÿÿÿÿ)r   Úlearning_rater   r   r   r   ©r   r   r   r   r   )r   r   r   r   ÚithroundÚnum_boost_roundr   c                 S   s   || d  S ©Nr   © )r!   r"   r$   r$   úV/var/www/html/CropPilot/venv/lib/python3.10/site-packages/xgboost/testing/callbacks.pyÚ	eta_decay^   ó   z run_eta_decay.<locals>.eta_decayr   )r   N)r   r   ÚlistÚmapÚfloatÚ
isinstancer   ÚintÚrangeÚlenr
   )r   r   r   r   Ú	schedulerÚ	watchlistÚ	num_roundÚparamr   ÚbstÚeval_errors_0Úeval_errors_1Úeval_errors_2r&   Úeval_errors_3Úir$   r$   r%   Úrun_eta_decay   s–   úúúúûúúr9   c                   C   s   t tddgg d¢ƒƒS )z)Test parameters for the leaf output test.ÚapproxÚhist)r   zreg:absoluteerrorúreg:quantileerror)r(   r   r$   r$   r$   r%   Útree_methods_objsv   s   þÿr=   r   c                    st  d‰ t }|df|dfg}d|d| |dœ}|dkrd|d	< d
tdtf‡ fdd„}t||ˆ |||ƒgd�}	d
tdtf‡ fdd„}
t||ˆ |||
ƒgd�}|	jdd�}|jdd�}t |¡}t |¡}|d d d d d }|d d d d d }|d |d ks‚J ‚|d |d ksŒJ ‚|d d d d d }|d d d d d }|d |d ks®J ‚|d |d ks¸J ‚dS )z&check decay has effect on leaf output.r   r   r   r   r   r    r<   g333333Ó?Úquantile_alphar8   r   c                    s   ˆ | d  S r#   r$   ©r8   ©r1   r$   r%   Úeta_decay_0—   r'   z.run_eta_decay_leaf_output.<locals>.eta_decay_0)r   r   c                    s   | dkrdS ˆ | d  S )Nr   g      @r$   r?   r@   r$   r%   Úeta_decay_1¢   s   z.run_eta_decay_leaf_output.<locals>.eta_decay_1Újson)Ú
raw_formatÚlearnerÚgradient_boosterÚmodelÚtreesÚbase_weightsÚsplit_conditionsé   N)r   r,   r*   r   Úsave_rawrC   Úloads)r   r   r   r   r   r/   r0   r2   rA   Úbst0rB   Úbst1Ú	bst_json0Ú	bst_json1Új0Új1Ú
tree_2th_0Ú
tree_2th_1Ú
tree_3th_0Ú
tree_3th_1r$   r@   r%   Úrun_eta_decay_leaf_output„   sN   ûûû

rX   )Ú__doc__rC   Ú	itertoolsr   Útypingr   r   r   Úcallbackr   Úcorer   r	   Útrainingr
   r   Úutilsr   Ústrr9   r=   rX   r$   r$   r$   r%   Ú<module>   sB   ÿÿÿÿ
þhÿÿÿÿÿþ