o
    Ú­jYO  ã                   @   s>  d Z ddl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 ddlZddlZddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZ ddlm Z  ddl!m"Z"m#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-m.Z. ede"de
e/ fdd„ƒZ0edede
e/ fdd„ƒZ0ede	e1ef de
e/ fdd„ƒZ0dee"ee	f de
e/ fdd„Z0de1de2de,ddfdd„Z3de,de1de1ddfdd „Z4d!e5d"e5d#e5de1de1ddfd$d%„Z6d!e5d"e5d#e5d&e5de1d'e2d(e2ddfd)d*„Z7d+e5d,ej8d-ej8d.eddf
d/d0„Z9de1d1e2ddfd2d3„Z:de1de1ddfd4d5„Z;e <ej=¡j>Z?dZ@d6e5d"e5d7e5de1d8e/de1d9e2d:e2d;e2defd<d=„ZAd>e5d?e5d@e5dAe5de1de1d:e2ddfdBdC„ZBd>e5d?e5dAe5de,de1d:e2ddfdDdE„ZCde1de,ddfdFdG„ZDde1de,ddfdHdI„ZEdJe	e1ef dKedLe5de	e1ef fdMdN„ZFG dOdP„ dPeƒZGdS )QzTests for updaters.é    N)ÚpartialÚupdate_wrapper)Úascii_lowercase)ÚAnyÚDictÚListÚUnionÚoverload)Úmake_regressioné   )ÚTrainingCallback)Úimport_cupy)ÚBoosterÚDataIterÚDMatrixÚExtMemQuantileDMatrixÚQuantileDMatrix©Úis_pd_cat_dtype)ÚXGBModelÚXGBRegressor)Útrainé   )ÚIteratorForTestÚmake_batchesÚmake_categorical)ÚCatIter)ÚDeviceÚassert_allcloseÚnon_increasingÚmodelÚreturnc                 C   ó   d S ©N© ©r    r$   r$   úT/var/www/html/CropPilot/venv/lib/python3.10/site-packages/xgboost/testing/updater.pyÚget_basescore   ó   r'   c                 C   r"   r#   r$   r%   r$   r$   r&   r'   #   r(   c                 C   r"   r#   r$   r%   r$   r$   r&   r'   '   r(   c                 C   sR   t | tƒr	|  ¡ } t | tƒr| d d d }nt |  ¡ ¡d d d }t |¡S )z1Get base score from an XGBoost sklearn estimator.ÚlearnerÚlearner_model_paramÚ
base_score)Ú
isinstancer   Úget_boosterÚdictÚjsonÚloadsÚsave_config)r    Ú
jinterceptr$   r$   r&   r'   +   s   

ÿ
Útree_methodÚweightedÚdevicec              	      s  ddl m‰ ddlm‰  d}d}d}tj d¡}t|||d�\}}|r*|j|d�‰nd	‰t||ˆd
�}	t 	ddg¡‰tj
ˆjtjd�}
i }td| |ˆ|
dœ|	||	dfg|d�}|j|	dd�}t|d d ƒshJ ‚|d d d dk stJ ‚‡ ‡‡‡fdd„tˆjƒD ƒ}t |j¡}tˆjd ƒD ]V}ˆ| }td| |||
| dœ|	||	dfg|| |d�}t|d d ƒs·J ‚|d d d dk sÃJ ‚tjjt 	|d d ¡t 	|d d ¡ddd� | |	¡|d	d	…|f< q�tˆjd ƒD ]}tj |d	d	…|f |d	d	…|f ¡ qîd	S )zTest for quantile loss.r   )Úmean_pinball_loss)Ú_metric_decoratori   é   iÊ  ©Ú	n_samplesÚ
n_featuresÚrandom_state©ÚsizeN©Úweightçš™™™™™¹?ç      à?)ÚshapeÚdtypeúreg:quantileerror)Ú	objectiver3   r5   Úquantile_alphar+   ÚTrain©Únum_boost_roundÚevalsÚevals_resultT)Ústrict_shapeÚquantileéÿÿÿÿg      4@c              	      s(   g | ]}ˆ t tˆˆˆ| d �ˆƒƒ‘qS ))Úsample_weightÚalpha)r   r   ©Ú.0Úi©r7   rQ   r6   r@   r$   r&   Ú
<listcomp>k   s    úþÿÿz'check_quantile_loss.<locals>.<listcomp>)rJ   rK   Úcustom_metricrL   g      >@r6   g�íµ ÷Æ°>)ÚatolÚrtol)Úsklearn.metricsr6   Úxgboost.sklearnr7   ÚnpÚrandomÚRandomStater
   r   ÚarrayÚzerosrC   Úfloat32r   Úpredictr   Úranger>   ÚemptyÚtestingr   )r3   r4   r5   r:   r;   Ún_estimatorsÚrngÚXÚyÚXyr+   rL   Úbooster_multiÚpredt_multiÚmetricsÚpredtsrT   ÚaÚ	booster_ir$   rU   r&   Úcheck_quantile_loss<   s€   
ýûõù
ûôü(ÿrq   Úmulti_strategyc                    s†   t dddd�\}}t||ƒ‰ dtttf dtddf‡ fd	d
„}t g d¢¡}d|| ||dœ}||dƒ | d¡ d|d< ||dƒ dS )z/Test quantile loss with boosting random forest.i   é   iê  r9   ÚparamsÚmetricr!   Nc                    s~   i }d| d< t | ˆ dˆ dfg|d� i }d| d< t | ˆ dˆ dfg|d� tj |d | |d | ¡ t|d | ƒs=J ‚d S )Nr   Únum_parallel_treer8   rH   rI   r   )r   r\   re   r   r   )rt   ru   Úevals_result_0Úevals_result_1©rj   r$   r&   Úrun�   s,   ûû	ÿz#check_quantile_loss_rf.<locals>.run)rA   rB   gÍÌÌÌÌÌì?rE   )rF   r3   r5   rG   rr   rN   rG   zreg:absoluteerrorrF   Úmae)r
   r   r   Ústrr   r\   r_   Úpop)r5   r3   rr   rh   ri   rz   rQ   rt   r$   ry   r&   Úcheck_quantile_loss_rf•   s   
"û

r~   Ún_samples_per_batchr;   Ú	n_batchesc                 C   sŽ   t t| |||dkƒdddœŽ}t|ƒ}|d|ddgdœ}t||ƒ}| ¡ \}	}
}t|	|
|d	�}t||ƒ}| |¡}| |¡}tj ||¡ d
S )z2Check external memory with the quantile objective.ÚcpuÚcacheF©r‚   Úon_hostrE   gš™™™™™É?çš™™™™™é?)r3   rF   r5   rG   r?   N)	r   r   r   r   Ú	as_arraysrb   r\   re   r   )r   r;   r€   r3   r5   ÚitÚXy_itrt   Ú
booster_itrh   ri   Úwrj   ÚboosterÚpredt_itÚpredtr$   r$   r&   Úcheck_quantile_loss_extmemÈ   s$   ýü



rŽ   Ún_binsr„   Úis_catc                C   sh  |rt | ||dddd|dd�	}ntt| |||dkd�d|d	œŽ}t|||d
�}tjtdd�� t|d|dœ|dd�}	W d  ƒ n1 sDw   Y  t||dœ|dd�}	|rct | ||dddd|dd�	}ntt| |||dkd�ddiŽ}t|||d
�}
t||dœ|
dd�}| 	¡ }|
 	¡ }t
j |d |d ¡ t
j |d |d ¡ |	 |¡}| |
¡}t
j ||¡ dS )z+Basic test for the `ExtMemQuantileDMatrix`.é   ç        rB   Fr‚   )	r   r;   r€   Ún_catsÚsparsityÚ	cat_ratioÚonehotr5   r‚   r�   ©Úuse_cupyrƒ   ©Úmax_binÚenable_categoricalzOnly the `hist`)ÚmatchÚapprox)r5   r3   rš   r8   )rJ   N)r5   rš   r   r   )r   r   r   r   ÚpytestÚraisesÚ
ValueErrorr   r   Úget_quantile_cutr\   re   r   rb   )r   r;   r€   r�   r5   r„   r�   r‡   rˆ   r‰   rj   r‹   Úcut_itÚcutrŒ   r�   r$   r$   r&   Úcheck_extmem_qdmç   sp   ÷ÿû
ýÿ÷ÿÿü

r¤   Ú	n_entriesÚindptrÚdataÚdtypesc                 C   sÄ   |j d |d ksJ ‚|j d | ksJ ‚|jtjksJ ‚td|jƒD ]=}t||d  ƒ}t|| ƒ}t|d |ƒD ]%}|| ||d  ksGJ ‚t|j|d  ƒr^|| ||d  d ks^J ‚q9q"dS )zCheck the cut values.r   rO   r   N)	rC   rD   r\   Úuint64rc   r>   Úintr   Úiloc)r¥   r¦   r§   r¨   rT   ÚbegÚendÚjr$   r$   r&   Ú	check_cut1  s   €ýýr¯   r˜   c                 C   sj  ddl }d}d}d}| tjg| ¡}tj|||d�\}}}	t|||	|d�}
|
 ¡ \}}t|d | |||ƒ t	|||	d	�}
t
| |d
œ|
ƒ |
 ¡ \}}t|d | |||ƒ d}d}tt||||ƒdddœŽ}t	|ƒ}t
| |d
œ|
ƒ |
 ¡ \}}t|d | |||ƒ d}t|||ddd�\}}|r¥ddl}tƒ }| |¡}| |¡}t|||dd�}| ¡ \}}t|| |||jƒ t	||dd�}t
| |d
œ|ƒ | ¡ \}}t|| |||jƒ t|||dddd�\}}tdd„ |jD ƒƒ}|| }|| |d |  }t|||dd�}| ¡ \}}t||||jƒ t	||dd�}t
| |d
œ|ƒ | ¡ \}}t||||jƒ dS )zCheck with optional cupy.r   Ni   é   rs   r—   )r@   rš   r   r?   )r3   rš   é   é   r‚   Frƒ   é    r…   )r–   r”   Tr™   ©r›   rB   )r–   r”   r•   c                 S   s   g | ]}t |ƒrd ‘qS )r   r   )rS   rD   r$   r$   r&   rV   }  s    z1check_get_quantile_cut_device.<locals>.<listcomp>)ÚpandasÚSeriesr\   ra   Útmr
   r   r¡   r¯   r   r   r   r   r   Úcudfr   Úfrom_pandasr_   r¨   Úlen)r3   r˜   Úpdr:   r;   rš   r¨   rh   ri   rŠ   ÚXywr¦   r§   r€   r   r‡   rj   Ún_categoriesr¸   ÚcpÚn_cat_featuresÚn_num_featuresr¥   r$   r$   r&   Úcheck_get_quantile_cut_deviceB  sj   ý

ÿ


ÿrÁ   c                 C   s*   |  d¡}t| dƒ |rt| dƒ dS dS )zCheck the quantile cut getter.ÚcudaFTN)Ú
startswithrÁ   )r3   r5   r˜   r$   r$   r&   Úcheck_get_quantile_cut‹  s
   

ÿrÄ   r:   r“   r”   r–   Úextmemr›   c                C   s˜   t td| ƒdƒ}	t| |	 ||	|d||||rdnd d�	}
|r=|dkr)t|
|d�}|S |dkr5t|
|d�}|S td	|› d
�ƒ‚|
 ¡ \}}t|||d�}|S )Nr   r   ç      ð?r‚   )r€   r”   r•   r“   r–   r5   r‚   Úhistr´   r�   ztree_method z not supported.)ÚmaxÚminr   r   r   r    Úxy)r:   r;   r“   r5   r”   r3   r–   rÅ   r›   r€   r‡   rj   ÚcatÚlabelr$   r$   r&   Ú_create_dmatrix˜  s2   
÷ÿ
ùürÍ   ÚrowsÚcolsÚroundsÚcatsc                 C   s^  i }i }|t |dœ}	t| |||dd||dd�	}
t|	|
||
dfg|d� t| |||d|d|dd�	}t|	|||dfg|d� tjjt |d d	 ¡t |d d	 ¡d
d� t|d d	 ƒs]J ‚i }t|	d< d|	d< t|	|||dfg|d� |d d	 }|d d	 }t	||ƒD ]
\}}||ksŽJ ‚q„d|	d< i }t|	|d|dfg|d� t|d d	 ƒs­J |ƒ‚dS )z0Test for one-hot encoding with categorical data.)r3   Úmax_cat_to_onehotr5   r’   TF)r“   r5   r”   r–   r3   rÅ   r›   rH   rI   )r“   r5   r”   r3   r–   rÅ   r›   Úrmsegü©ñÒMbP?©rY   rÒ   r   Ú
reg_lambdarÆ   r³   N)
Ú
USE_ONEHOTrÍ   r   r\   re   r   r_   r   ÚUSE_PARTÚzip)rÎ   rÏ   rÐ   rÑ   r5   r3   rÅ   Úby_etl_resultsÚby_builtin_resultsÚ
parametersÚ	Xy_onehotÚXy_catÚby_groupingÚrmse_ohÚ
rmse_groupro   Úbr$   r$   r&   Úcheck_categorical_ohe¿  s�   ü÷û÷ûýûûrâ   c                   s\   |ˆdœ‰t | ||dˆ|d|dd�	‰ ˆ  ¡ ‰dtddf‡ ‡‡‡fd	d
„}|tƒ |tƒ dS )z+Check categorical data with missing values.©r3   r5   rB   FT)r“   r”   r5   r3   r–   rÅ   r›   rÒ   r!   Nc                    sn   | ˆd< i }t ˆˆ dˆ dfg|d�}t|d d ƒsJ ‚| ˆ ¡}t ˆ|¡}tˆ||d d d dd� d S )	NrÒ   r8   rH   rI   rÓ   rO   gñhãˆµøô>rÔ   )r   r   rb   r·   Úroot_mean_squarer   )rÒ   rL   r‹   Úy_predtrÓ   ©rj   r5   rÌ   rÛ   r$   r&   rz   <  s   û
 z&check_categorical_missing.<locals>.run)rÍ   Ú	get_labelrª   rÖ   r×   )rÎ   rÏ   rÑ   r5   r3   rÅ   rz   r$   ræ   r&   Úcheck_categorical_missing$  s    

÷rè   c                    s˜   ddl }tj d¡‰ d}d}|j‡ fdd„t|ƒD ƒdd�d|…  ¡ }td	| |d
d�}| t|ƒ¡}|j||||fgd� t	| 
¡ d d ƒsJJ ‚dS )z6Test data with size smaller than number of categories.r   Néd   r‘   c                    s$   g | ]}d   ˆ jttƒdd�¡‘qS )Ú r±   r=   )ÚjoinÚchoiceÚlistr   rR   ©rg   r$   r&   rV   ]  s   $ zrun_max_cat.<locals>.<listcomp>Úcategory)rD   Té
   )r›   r3   r5   rf   )rh   ri   Úeval_setÚvalidation_0rÓ   )rµ   r\   r]   Údefault_rngr¶   rc   Úto_framer   Úfitr   rL   )r3   r5   r»   Ún_catÚnrh   Úregri   r$   rî   r&   Úrun_max_catT  s*   þýýürù   c                 C   sÐ  t j ¡ }|jdddd� dd¡}|jdddd�}t  t j¡jd |d	< t	||d
gd d�}t
 t¡� t| |dœ|ƒ W d  ƒ n1 sFw   Y  d|d	< t	||d
gd d�}t
 t¡� t| |dœ|ƒ W d  ƒ n1 sqw   Y  |jdddd� dd¡}|jdddd�}t	||d
gd d�}t
 t¡� t| |dœ|ƒ W d  ƒ n1 s¬w   Y  |dkræddl}| |¡| |¡}}t
 t¡� t||d
gd d� W d  ƒ dS 1 sßw   Y  dS dS )z%Test with invalid categorical inputs.r   é   iè  )ÚlowÚhighr>   ré   rð   r   )ÚlocÚscaler>   )é   é   Úc)Úfeature_typesrã   Ni   rÂ   )r\   r]   ró   ÚintegersÚreshapeÚnormalÚiinfoÚint32rÈ   r   rž   rŸ   r    r   Úcupyr_   r   )r3   r5   rg   rh   ri   rj   r¾   r$   r$   r&   Úrun_invalid_categoryl  s4   
ÿÿÿ"ÿür	  ÚparamÚdmatÚ
num_roundsc                 C   sf   i }t | |||dfgd|d�}| ¡ | ¡ ksJ ‚| ¡ |ks!J ‚|j|jks)J ‚|j|jks1J ‚|S )z-Get training result from parameters and data.r   F)rK   Úverbose_evalrL   )r   Únum_featuresÚnum_colÚnum_boosted_roundsÚfeature_namesr  )r
  r  r  Úresultr‹   r$   r$   r&   Útrain_resultŽ  s   úr  c                   @   s*   e Zd ZdZdedededefdd„ZdS )	ÚResetStrategyz"Callback for testing multi-output.r    ÚepochÚ	evals_logr!   c                 C   s0   |d dkr|  ddi¡ dS |  ddi¡ dS )Nr   r   rr   Úmulti_output_treeÚone_output_per_treeF)Ú	set_param)Úselfr    r  r  r$   r$   r&   Úafter_iteration¦  s
   ÿzResetStrategy.after_iterationN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rª   r.   Úboolr  r$   r$   r$   r&   r  £  s    r  )Hr  r/   Ú	functoolsr   r   Ústringr   Útypingr   r   r   r   r	   Únumpyr\   rž   Úsklearn.datasetsr
   Úxgboost.testingre   r·   Úcallbackr   Úcompatr   Úcorer   r   r   r   r   r§   r   Úsklearnr   r   Útrainingr   r   r   r   Ú	data_iterr   Úutilsr   r   r   Úfloatr'   r|   r   rq   r~   rª   rŽ   r¤   Úndarrayr¯   rÁ   rÄ   r  r  rÈ   rÖ   r×   rÍ   râ   rè   rù   r	  r  r  r$   r$   r$   r&   Ú<module>   s*    ÿ
þYÿÿÿ
þ3ÿþýüû
úÿþüûúùø	
÷Jÿÿÿÿ
þI	ÿþüûúùø	÷
ö
õ'þýüûúùø	
÷eÿþýûúù
ø0"
ÿÿÿ

þ