o
    Ú­j‚f  ã                   @   s~  d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
ZddlZddlmZmZm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!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/ de-dee0 ddfdd„Z1de-dee0 ddfdd„Z2de-de3ddfdd„Z4de-ddfdd„Z5de-defdd„Z6G d d!„ d!e"ƒZ7G d"d#„ d#e!ƒZ8G d$d%„ d%e7ƒZ9de-ddfd&d'„Z:de-ddfd(d)„Z;de-ddfd*d+„Z<de-ddfd,d-„Z=de-ddfd.d/„Z>de-d0e?ddfd1d2„Z@de-ddfd3d4„ZAde-ddfd5d6„ZBdd7d7d7d8d9œde-d:e?d;e?d<ejCd=ejCd>eee?ef  d?e3d@e3dAe3dBe3ddfdCdD„ZDde-ddfdEdF„ZEde-ddfdGdH„ZFde-ddfdIdJ„ZGde-ddfdKdL„ZHde-ddfdMdN„ZIde-ddfdOdP„ZJde-ddfdQdR„ZKde-ddfdSdT„ZLde-ddfdUdV„ZMdeee-gdf  fdWdX„ZNde-dYe?deOfdZd[„ZPde-dYe?ddfd\d]„ZQde-ddfd^d_„ZRdS )`z Tests for multi-target training.é    )Ú
ModuleType)ÚAnyÚCallableÚDictÚListÚOptionalÚTupleN)Úmake_classificationÚmake_multilabel_classificationÚmake_regression)Úcosine_similarityé   )Ú	ArrayLike)Úimport_cupy)ÚBoosterÚDMatrixÚExtMemQuantileDMatrixÚQuantileDMatrixÚ
build_info)Ú	ObjectiveÚTreeObjective)ÚXGBClassifier)Útrainé   )ÚIteratorForTest)ÚResetStrategyÚtrain_result)ÚDeviceÚassert_allcloseÚnon_increasingÚdeviceÚlearning_rateÚreturnc                 C   sÄ   t dddddd�\}}tddtƒ gd| |d	�}|j||||fgd
� |jdks)J ‚t| ¡ d d ƒs5J ‚|durOt|d ƒdk rO| ¡ d d d dk sOJ ‚| |¡}|j	|j	d dfks`J ‚dS )z'Use vector leaf for multi-class models.é€   é   é
   é   éé  )Ú
n_featuresÚn_informativeÚ	n_classesÚrandom_stateTÚmulti_output_tree©Údebug_synchronizeÚmulti_strategyÚ	callbacksÚn_estimatorsr    r!   ©Úeval_setúmulti:softprobÚvalidation_0ÚmloglossNç      ð?çñhãˆµøä>éÿÿÿÿg
×£p=
§?r   )
r	   r   r   ÚfitÚ	objectiver   Úevals_resultÚabsÚpredict_probaÚshape©r    r!   ÚXÚyÚclfÚproba© rE   úY/var/www/html/CropPilot/venv/lib/python3.10/site-packages/xgboost/testing/multi_target.pyÚrun_multiclass   s$   

ÿú
rG   c                 C   s¶   t ddd�\}}tddtƒ gd| |d�}|j||||fgd� |jd	ks&J ‚t| ¡ d
 d ƒs2J ‚|durLt|d ƒdk rL| ¡ d
 d d dk sLJ ‚| |¡}|j	|j	ksYJ ‚dS )z6Use vector leaf for multi-label classification models.r#   r'   ©r+   Tr,   r%   r-   r2   zbinary:logisticr5   ÚloglossNr7   r8   r9   g¤p=
×£°?)
r
   r   r   r:   r;   r   r<   r=   r>   r?   r@   rE   rE   rF   Úrun_multilabel4   s    ú
rJ   Úweightedc                    s¬   d| g d¢ddœ‰d‰t ˆddd�\‰ ‰d	ttj d
df‡ ‡‡‡fdd„}|s*d}ntj d¡}|jddˆd�}||ƒ tˆ ˆ|d�}tˆ|dd�}t	|d d ƒsTJ ‚dS )z*Check quantile regression for vector leaf.úreg:quantileerror)gÍÌÌÌÌÌÜ?ç      à?gš™™™™™á?r,   )r;   r    Úquantile_alphar/   é   é   éê  )Ú	n_samplesr(   r+   Úweightr"   Nc                    s”   t ˆ ˆ| d�}tˆ||dfgdd�}| |¡}|jˆdfks J ‚|dd…df |dd…df k ¡ s4J ‚|dd…df |dd…df k ¡ sHJ ‚dS )	z…The first tree should not generate quantile crossing given sufficient amount
        of samples for quantile interpolation.

        ©rS   ÚTrainr   )ÚevalsÚnum_boost_roundé   Nr   r   )r   r   Úpredictr?   Úall)rS   ÚXyÚboosterÚy_predt©rA   rR   ÚparamsrB   rE   rF   Úno_crossing_first_treeT   s   
(,z1run_quantile_loss.<locals>.no_crossing_first_treeç        r7   )ÚsizerT   r%   ©Ú
num_roundsr   Úquantile)
r   r   ÚnpÚndarrayÚrandomÚdefault_rngÚuniformr   r   r   )r    rK   r`   rS   Úrngr[   r<   rE   r^   rF   Úrun_quantile_lossI   s    ü"rl   c           	      C   sê   d| ddœ}d}t |dddd�\}}t||ƒ}i }t|||d	fgd
|dd�}| |¡}t |dd…df |dd…df   ¡ ¡dksDJ ‚t |dd…df |dd…df   ¡ ¡dks]J ‚t|d	 d ƒsgJ ‚|d	 d d dk ssJ ‚dS )z*Test mean absolute error with vector leaf.zreg:absoluteerrorr,   ©r;   r    r/   é   rP   rX   rQ   ©rR   r(   Ú	n_targetsr+   rU   F©rV   Úverbose_evalr<   rW   Nr   r   iè  r   Úmaer9   g      >@)r   r   r   rY   rf   r=   Úsumr   )	r    r_   rR   rA   rB   r[   r<   r\   ÚpredtrE   rE   rF   Úrun_absolute_errorn   s.   ý
ÿ
ú
22rv   c                 C   s   | dkr	t ƒ }|S t}|S )NÚcuda)r   rf   )r    ÚndarE   rE   rF   Ú_array_impl‹   s
   ÿry   c                
   @   sf   e Zd ZdZdeddfdd„Zdeded	ede	eef fd
d„Z
dededede	eef fdd„ZdS )ÚLsObj0z%Split grad is the same as value grad.r    r"   Nc                 C   ó
   || _ d S ©N©r    ©Úselfr    rE   rE   rF   Ú__init__–   ó   
zLsObj0.__init__Ú	iterationÚy_predÚdtrainc                 C   ó8   t | jƒ}| ¡ }t ||d ¡\}}| |¡| |¡fS r|   ©ry   r    Ú	get_labelÚtmÚls_objÚarray©r   r‚   rƒ   r„   rx   Úy_trueÚgradÚhessrE   rE   rF   Ú__call__™   ó   
zLsObj0.__call__r�   rŽ   c                 C   s   t | jƒ}| |¡| |¡fS r|   )ry   r    rŠ   )r   r‚   r�   rŽ   rx   rE   rE   rF   Ú
split_grad¢   s   
zLsObj0.split_grad)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r€   Úintr   r   r   r�   r‘   rE   rE   rE   rF   rz   “   s*    ÿÿÿ

þ	ÿÿÿ
þrz   c                
   @   sD   e Zd ZdZdeddfdd„Zdeded	ede	eef fd
d„Z
dS )ÚLsObj1zNo split grad.r    r"   Nc                 C   r{   r|   r}   r~   rE   rE   rF   r€   ¬   r�   zLsObj1.__init__r‚   rƒ   r„   c                 C   r…   r|   r†   r‹   rE   rE   rF   r�   ¯   r�   zLsObj1.__call__)r’   r“   r”   r•   r   r€   r–   r   r   r   r�   rE   rE   rE   rF   r—   ©   s    ÿÿÿ
þr—   c                
       sP   e Zd ZdZdedef‡ fdd„Zdededed	e	e
je
jf fd
d„Z‡  ZS )ÚLsObj2zUse mean as split grad.r    Ú
check_usedc                    s   || _ tƒ j|d� d S )Nr}   )Ú_chkÚsuperr€   )r   r    r™   ©Ú	__class__rE   rF   r€   ½   s   zLsObj2.__init__r‚   r�   rŽ   r"   c                 C   s8   t | jƒ}| jr
J ‚|j|dd�}|j|dd�}||fS )NFr   )Úaxis)ry   r    rš   Úmean)r   r‚   r�   rŽ   rx   ÚsgradÚshessrE   rE   rF   r‘   Á   s   
zLsObj2.split_grad)r’   r“   r”   r•   r   Úboolr€   r–   r   r   rf   rg   r‘   Ú__classcell__rE   rE   rœ   rF   r˜   º   s    ÿÿÿþr˜   c                    s  t ddddd�\}}t||ƒ‰ 	ddtt dttt  d	tf‡ ‡fd
d„}|tˆƒƒ}|tˆƒƒ}t	j
 | |¡| |¡¡ |tˆƒdg|jd  ƒ}|ddg|jd  ƒ}t	j
 | |¡| |¡¡ |tˆdƒƒ t t¡� |tˆdƒƒ W d  ƒ dS 1 s‚w   Y  dS )z6Basic test for using reduced gradient for tree splits.rn   rP   éÊ  é   ©rR   r(   r+   rp   NÚobjÚ
base_scorer"   c                    sB   i }t dˆdd|dœˆ ˆ dfg| d|d�}t|d d ƒsJ ‚|S )	NTr,   r   )r.   r    r/   r!   r¨   rU   é   ©rV   r§   rW   r<   Úrmse)r   r   )r§   r¨   r<   r\   ©r[   r    rE   rF   Úrun_testÔ   s    ûôz"run_reduced_grad.<locals>.run_testrM   r   FTr|   )r   r   r   r   ÚlistÚfloatr   rz   r—   rf   Útestingr   Úinplace_predictr?   r˜   ÚpytestÚraisesÚAssertionError)r    rA   rB   r­   Ú	booster_0Ú	booster_1Ú	booster_2Ú	booster_3rE   r¬   rF   Úrun_reduced_gradÍ   s4   
ÿ
ÿÿ
ÿþÿÿ"ÿr¹   c              	   C   s  t | ƒ}d}d}d}dg| }| dd|ddœ}g }g }t|ƒD ]}	td	d|	d
 |d�\}
}| | |
¡¡ | | |¡¡ qt||dddd�}t|| dkrOdndd�}i }t||||dfg|d�}t||ddd�}t|ƒ}i }t||||dfg|d�}t	j
 |d d |d d ¡ t|d d ƒs”J ‚| ¡ \}}}t| | |¡| |¡ƒ tƒ }d}| dkrÁ||v rÁ|| d dk rÁt d¡ t||ddd|jd | |jd
  d�}t|| dkrÝdndd�}i }t|||dfgt| ƒ||d�}t	j
 |d d |d d ¡ t| | |¡| |¡ƒ dS )z&Test vector leaf with external memory.r&   r©   rX   rM   r,   r7   T)r    r/   r!   r¨   r.   é   r   r¦   NÚcache)r»   Úon_hostrw   )Úcache_host_ratiorU   )rW   rV   r<   )r»   r«   ÚTHRUST_VERSIONr   zCCCL version too old.)r»   r¼   Úmin_cache_page_bytesrª   )ry   Úranger   ÚappendÚasarrayr   r   r   r   rf   r°   r   r   Ú	as_arraysr±   r   r²   Úxfailr?   rz   )r    rx   Ú	n_batchesÚn_roundsrp   Ú	interceptr_   ÚXsÚysÚiÚX_iÚy_iÚitr[   Úevals_result_0rµ   Úevals_result_1r¶   rA   Ú_ÚbinfoÚtvÚevals_result_2r·   rE   rE   rF   Úrun_with_iterú   s’   
û
ÿÿûûÿ 
úúÿrÔ   c                    sJ   t ddddd�\‰ ‰dtt ddf‡ ‡‡fd	d
„}|dƒ |tˆƒƒ dS )zTest for learning rate.i   rP   r'   rX   )r+   rp   r§   r"   Nc           	         s¨   ˆdddddœ}t ˆ ˆƒ}t||d| d�}d|d	< t||d| d�}d
|d	< t||d| d�}| |¡}| |¡}| |¡}tjj||d dd� tjj|d |dd� d S )Nr,   r7   Tra   )r    r/   r!   r.   r¨   r   )rW   r§   çš™™™™™¹?r!   ç       @r%   g�íµ ÷Æ°>)Úrtolr   )r   r   rY   rf   r°   r   )	r§   r_   r[   rµ   r¶   r·   Úpredt_0Úpredt_1Úpredt_2©rA   r    rB   rE   rF   ÚrunT  s"   û



zrun_eta.<locals>.run)r   r   r   rz   )r    rÜ   rE   rÛ   rF   Úrun_etaP  s   rÝ   c                    sZ   t tdƒdddd�\‰ ‰dtf‡ ‡‡fdd„}|ƒ }|ƒ }| ¡ }| ¡ }||ks+J ‚d	S )
z6Check the vector leaf implementation is deterministic.i   é@   r¤   r¥   r¦   r"   c                     s$   t ˆ ˆƒ} ˆdddœ}t|| dd�S )Nr,   T)r    r/   r.   rP   ©rW   )r   r   )r[   r_   rÛ   rE   rF   rÜ   t  s   
ýzrun_deterministic.<locals>.runN)r   r–   r   Úsave_raw)r    rÜ   rµ   r¶   Úraw_0Úraw_1rE   rÛ   rF   Úrun_deterministicn  s   
ÿ	rã   c                 C   sÆ  d}t d|ddd�\}}tj|dftjd�}d|d	  |d
|d	 …< t|||d�}| ddddœ}t||dd�}dD ]X}|j|d�}	t|	ƒdksNJ d|› �ƒ‚td|d	 ƒD ]}
d|
› �|	v siJ d|
› d|› d�ƒ‚qUt|d	 |ƒD ]}
d|
› �|	vs|J ‚qq|	 	¡ D ]}t
|tƒsŠJ ‚|dks�J ‚q�q9tdd�\}}tdd| dd�}|j||t d|jd ¡d� |j}|d dks»J ‚|d |d d ksÇJ ‚tjjjt d|jd ¡|dd �}|jd d!ksáJ ‚d
S )"zDTest column sampling with feature importance for multi-target trees.é    rn   r¤   rX   r¦   r   )r?   Údtyper7   r   N)Úfeature_weightsr,   Tgš™™™™™Ù?)r    r/   r.   Úcolsample_bynoderP   rß   ©rS   ÚgainÚ
total_gainÚcoverÚtotal_cover©Úimportance_typer   zNo scores for Úfz not in z scoresrH   rS   gš™™™™™É?)r/   rî   r    rç   ra   r9   r¥   )Údegg¸…ëQ¸ž?)r   rf   ÚzerosÚfloat32r   r   Ú	get_scoreÚlenrÀ   ÚvaluesÚ
isinstancer¯   r
   r   r:   Úaranger?   Úfeature_importances_Ú
polynomialÚ
PolynomialÚcoef)r    r(   rA   rB   ræ   r[   r_   r\   rî   Úscoresrï   ÚscorerC   ÚfiÚwrE   rE   rF   Úrun_column_sampling„  sJ   
ÿü&þü"r   Úgrow_policyc                 C   sR   t ddddd�\}}t||ƒ}| dd|dœ}t||d	d
�}t|d d ƒs'J ‚dS )z;Test grow policy (depthwise and lossguide) for vector leaf.rn   rP   r¤   rX   r¦   r,   T)r    r/   r.   r  r%   rc   r   r«   N)r   r   r   r   )r    r  rA   rB   r[   r_   r<   rE   rE   rF   Úrun_grow_policy¹  s   
ÿ
ür  c              	   C   sò   t ddddd�\}}t||d�}tdddd	| d
ddœd|tƒ gd�}tt|ƒƒdks,J ‚|j|d
d�}t |j	¡}|D ]}||j|d
d�7 }q;tj
j||dd� dD ]$}|j|d�}	t|	ƒdksbJ ‚|	 ¡ D ]}
t|
tƒsoJ ‚|
dksuJ ‚qfqRdS )z6Test mixed multi_strategy with ResetStrategy callback.rn   r©   rX   r¤   )rR   r)   r*   r+   ©ÚdataÚlabelr&   r4   r,   Tr   )Únum_parallel_treeÚ	num_classr;   r/   r    r.   r¨   rP   )rW   r„   r0   )Úoutput_marginr8   )Úatolrè   rí   N)r	   r   r   r   rô   r®   rY   rf   rñ   r?   r°   r   ró   rõ   rö   r¯   )r    rA   rB   r[   r\   ru   Ú	predt_sumÚtrî   rü   rý   rE   rE   rF   Úrun_mixed_strategyË  s>   
ÿù	ôþýr  c                    s\  d‰t dˆdddd�\}}t||d�}dd| d	d
dœ}ti |¥ddi¥|dd�ti |¥ddi¥|dd�ti |¥ddi¥|dtƒ gd�g}dtdtdtjf‡fdd„‰ dD ]W‰‡ ‡fdd„|D ƒ}t |d |d ¡rlJ ‚t |d |d ¡rxJ ‚t	|d g|d gƒd dks‰J ‚t	|d g|d gƒd dksšJ ‚t	|d g|d gƒd dks«J ‚qTdS ) z?Different strategies produce similar feature importance ratios.rP   rO   r%   r&   r¤   )rR   r(   r)   r*   r+   r  r4   Tr¥   )r  r;   r    r.   Ú	max_depthr/   r,   rä   rß   Úone_output_per_tree)rW   r0   r\   rî   r"   c                    sD   | j |d�‰ t ‡ fdd„tˆƒD ƒ¡}| ¡ dkr || ¡  S |S )z7Get feature importance as normalized array (sums to 1).rí   c                    s   g | ]}ˆ   d |› �d¡‘qS )rï   ra   )Úget)Ú.0rÊ   ©rü   rE   rF   Ú
<listcomp>  s    z^run_feature_importance_strategy_compare.<locals>.get_normalized_importance.<locals>.<listcomp>r   )ró   rf   rŠ   rÀ   rt   )r\   rî   Úarr)r(   r  rF   Úget_normalized_importance  s   zJrun_feature_importance_strategy_compare.<locals>.get_normalized_importancerè   c                    s   g | ]}ˆ |ˆƒ‘qS rE   rE   )r  Úb)r  rî   rE   rF   r  #  s    z;run_feature_importance_strategy_compare.<locals>.<listcomp>r   r   r   )r   r   gÍÌÌÌÌÌì?N)
r	   r   r   r   r   Ústrrf   rg   Úallcloser   )r    rA   rB   r[   Úbase_paramsÚboostersÚimpsrE   )r  rî   r(   rF   Ú'run_feature_importance_strategy_compareô  sR   
ûû
ýýüõ""$õr  FT)Úextra_paramsÚcheck_pred_positiveÚcheck_pred_probabilityÚcheck_pred_binaryÚstrictly_non_increasingr;   ÚmetricrA   rB   r  r  r  r  r   c                C   s  || ddœ}
|r|
  |¡ |jd }|jdkr|jd nd}t||ƒ}i }t|
||dfgd|dd�}| |¡}|j||fks@J ‚|rJ|dk ¡ sJJ ‚|rZ|dk ¡ rX|dk  ¡ sZJ ‚|rjtt 	|¡ƒ 
d	d
h¡sjJ ‚|d | }|	rzt|ƒsxJ ‚d S |d |d k s„J ‚d S )Nr,   rm   r   r   rU   FrP   rq   ra   r7   r9   )Úupdater?   Úndimr   r   rY   rZ   Úsetrf   ÚuniqueÚissubsetr   )r    r;   r!  rA   rB   r  r  r  r  r   r_   rR   rp   r[   r<   r\   ru   Úmetric_valsrE   rE   rF   Ú_run_regression_objective_test1  s<   ý


ú
r(  c                 C   s0   d\}}t |d|dd�\}}t| dd||ƒ dS )z/Test squared error regression with vector leaf.©rn   rX   rP   rQ   ro   zreg:squarederrorr«   N©r   r(  ©r    rR   rp   rA   rB   rE   rE   rF   Úrun_reg_squarederrord  s
   
ÿr,  c                 C   sL   d\}}t j d¡}| |df¡}| dd||f¡}t| dd||dd	� d
S )z:Test logistic regression for probability with vector leaf.r)  rQ   rP   ra   r7   zreg:logisticr«   T)r  N)rf   rh   ri   Ústandard_normalrj   r(  ©r    rR   rp   rk   rA   rB   rE   rE   rF   Úrun_reg_logisticm  ó   
ÿr/  c                 C   óL   d\}}t j d¡}| |df¡}| dd||f¡}t| dd||dd� d	S )
z'Test gamma regression with vector leaf.r)  rQ   rP   rÖ   z	reg:gammazgamma-devianceT©r  N©rf   rh   ri   r-  Úgammar(  r.  rE   rE   rF   Úrun_reg_gammax  r0  r5  c                 C   sN   d\}}t j d¡}| |df¡}t  | ||f¡¡d }t| dd||ƒ dS )z3Test squared log error regression with vector leaf.r)  rQ   rP   rÕ   zreg:squaredlogerrorÚrmsleN)rf   rh   ri   r-  r=   r(  r.  rE   rE   rF   Úrun_reg_squaredlogerrorƒ  s
   r7  c                 C   s8   d\}}t |d|dd�\}}t| dd||ddid	� d
S )z4Test pseudo huber error regression with vector leaf.r)  rP   rQ   ro   zreg:pseudohubererrorÚmpheÚhuber_sloper7   )r  Nr*  r+  rE   rE   rF   Úrun_reg_pseudohubererrorŒ  s   
ÿ
ÿr:  c                 C   s,   d}t |dd�\}}t| dd||dd� dS )	zCTest binary logitraw with vector leaf (multi-label classification).rn   rQ   rH   zbinary:logitrawrI   F)r   N©r
   r(  ©r    rR   rA   rB   rE   rE   rF   Úrun_binary_logitraw—  s
   
ÿr=  c              	   C   s.   d}t |dd�\}}t| dd||ddd� d	S )
zETest binary hinge loss with vector leaf (multi-label classification).rn   rQ   rH   zbinary:hingeÚerrorTF)r  r   Nr;  r<  rE   rE   rF   Úrun_binary_hinge   s   
ùr?  c                 C   sR   d\}}t j d¡}| |df¡}| d||f¡ t j¡}t| dd||dd� d	S )
z)Test Poisson regression with vector leaf.r)  rQ   rP   r¥   zcount:poissonzpoisson-nloglikTr2  N)rf   rh   ri   r-  ÚpoissonÚastyperò   r(  r.  rE   rE   rF   Úrun_count_poisson¯  s   
ÿrB  c                 C   r1  )
z)Test Tweedie regression with vector leaf.r)  rQ   rP   rÖ   zreg:tweedieztweedie-nloglik@1.5Tr2  Nr3  r.  rE   rE   rF   Úrun_reg_tweedieº  r0  rC  c               	   C   s   t ttttttttg	} | S )zList of obj tests.)	r,  r/  r5  r7  r:  r=  r?  rB  rC  )ÚobjsrE   rE   rF   Úall_reg_objectivesÅ  s   ÷rE  Úsampling_methodc              	   C   s   | ddd|ddddœ}|S )NÚhistr,   rM   é   TrQ   )r    Útree_methodr/   Ú	subsamplerF  r  r.   ÚseedrE   )r    rF  r_   rE   rE   rF   Ú_make_subsample_paramsÕ  s   ø
rL  c           
      C   s°   d}t |dddd�\}}t||ƒ}t| |ƒ}t||dd�}t|d d d	d
�s)J ‚t| |ƒ}d|d< g d¢|d< t||dd…df ƒ}t||dd�}	t|	d d d	d
�sVJ ‚dS )zTest row subsampling.rO   rP   rX   rQ   ro   rc   r   r«   g{®Gáz„?)Ú	tolerancerL   r;   )g      Ð?rM   g      è?rN   Nr   re   )r   r   rL  r   r   )
r    rF  rR   rA   rB   r[   r_   r<   Ú	Xy_singleÚevals_result_qrE   rE   rF   Úrun_subsampleã  s   
ÿ


rP  c                    sd   d}t |dddd�\}}t||ƒ‰ tˆdƒ‰dtdB d	df‡ ‡‡fd
d„}|dƒ |tˆdƒƒ dS )z;Test that gradient-based sampling provides better accuracy.rº   rP   rX   rQ   ro   rj   r§   Nr"   c              	      s®   i }t ˆˆ dˆ dfg| d|d� tˆdƒ}i }t |ˆ dˆ dfg| d|d� |d d d }|d d d }t|d d ƒs?J ‚t|d d ƒsIJ ‚| d u rS||k sUJ ‚d S d S )Nrä   r   F)rW   rV   r§   rr   r<   Úgradient_basedr«   r9   )r   rL  r   )r§   Úevals_uniformÚparams_gradÚ
evals_gradÚuniform_finalÚ
grad_final©r[   r    Úparams_uniformrE   rF   rÜ     s:   ù
ù
ÿz1run_gradient_based_sampling_accuracy.<locals>.runF)r   r   rL  r   r˜   )r    rR   rA   rB   rÜ   rE   rW  rF   Ú$run_gradient_based_sampling_accuracyú  s   
ÿ

!rY  )Sr•   Útypesr   Útypingr   r   r   r   r   r   Únumpyrf   r²   Úsklearn.datasetsr	   r
   r   Úsklearn.metrics.pairwiser   Úxgboost.testingr°   rˆ   Ú_typingr   Úcompatr   Úcorer   r   r   r   r   r;   r   r   Úsklearnr   Útrainingr   r  r   Úupdaterr   r   Úutilsr   r   r   r¯   rG   rJ   r¢   rl   rv   ry   rz   r—   r˜   r¹   rÔ   rÝ   rã   r   r  r  r  r  rg   r(  r,  r/  r5  r7  r:  r=  r?  rB  rC  rE  ÚdictrL  rP  rY  rE   rE   rE   rF   Ú<module>   s”     %-V5)Dõÿþýüûùø	÷
öõ
ô3			