o
    Ú­j  ã                   @   s¤   d Z ddlmZ ddlmZ ddlZddlZddlZ	ddlm
Z ddlmZ ded	e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eddfdd„ZdS )zTests for learning to rank.é    )Ú
ModuleType)ÚAnyN)Útestingé   )ÚDeviceÚimplÚtree_methodÚdeviceÚreturnc                    sb  ddl }ddlm‰  ddlm}m} tjddddd	�\}}}}	|  |¡}
||
d
< t	j
dd||d�}| |
|¡ | |
|¡}|dksCJ ‚|
 ¡ }d|jd< |j|
|||fgd� t	j
dd||d�}|j|||d� | |
|¡}t ||¡svJ ‚|dkr‘|dd�}|||
|||
jd�}t|ƒdks‘J ‚dtdtdtdtf‡ fdd„}t	j
d|||dd�}|j|
|||fgd� | ||¡}t || ¡ d d  d! ¡sËJ ‚|dk�r|j |¡}| jjj|d"d#„ t|jd$ ƒD ƒd%�}
||
d
< t	j
dd||d�}| |
|¡ | |
|¡}t ||¡�sJ ‚tjtd&d'�� |j|
|||fgd� W d  ƒ dS 1 �s*w   Y  dS )(z$Test ranking with qid packed into X.r   N©Úmean_squared_error)ÚStratifiedGroupKFoldÚcross_val_scoreé€   é   é   é   )Ú	n_samplesÚ
n_featuresÚn_query_groupsÚmax_relÚqidÚndcg)Ún_estimatorsÚeval_metricr   r	   çffffffæ?g      @)r   r   )Úeval_set)r   ÚcpuF)Úshuffle)ÚcvÚgroupsé   Úy_trueÚy_predÚkwargsr
   c                    s*   t | dƒr	|  ¡ } tˆ | |fi |¤Žƒ S )NÚget)Úhasattrr%   Úfloat)r"   r#   r$   r   © úT/var/www/html/CropPilot/venv/lib/python3.10/site-packages/xgboost/testing/ranking.pyÚneg_mse7   s   
z#run_ranking_qid_df.<locals>.neg_mseT)r   r   r   r	   Údisable_default_eval_metricÚvalidation_0r*   éÿÿÿÿc                 S   s   g | ]}t |ƒ‘qS r(   )Ústr)Ú.0Úir(   r(   r)   Ú
<listcomp>L   s    z&run_ranking_qid_df.<locals>.<listcomp>r   )ÚcolumnszEither `group` or `qid`.)Úmatch)Úscipy.sparseÚsklearn.metricsr   Úsklearn.model_selectionr   r   ÚtmÚmake_ltrÚ	DataFrameÚxgbÚ	XGBRankerÚfitÚscoreÚcopyÚilocÚnpÚiscloser   Úlenr   r'   Úevals_resultÚsparseÚ
csr_matrixÚfrom_spmatrixÚrangeÚshapeÚpytestÚraisesÚ
ValueError)r   r   r	   Úscipyr   r   ÚXÚyÚqÚ_ÚdfÚrankerÚsÚvalid_dfÚs1ÚkfoldÚresultsr*   r=   ÚX_csrÚs2r(   r   r)   Úrun_ranking_qid_df   sl   
ÿ
ÿ
û 
ÿü$ÿrZ   c           
      C   sº   ddl m} tjddddd�\}}tj d¡}|jd|jd d	�}t 	|¡}||d
< t
jd| d�}| ||¡ | ||¡}|dksCJ ‚t
jd| d�}||||ƒ}|D ]}	|	dksZJ ‚qRdS )z#Test LTR with categorical features.r   )r   i   é
   r   F)r   r   Ún_categoriesÚonehotiÊ  )Úsizer   T)Úenable_categoricalr	   gÍÌÌÌÌÌì?r   N)r6   r   r7   Úmake_categoricalr@   ÚrandomÚdefault_rngÚchoicerH   Úsortr:   r;   r<   r=   )
r	   r   rM   rN   Úrngr   Últrr=   ÚscoresrS   r(   r(   r)   Úrun_ranking_categorical]   s"   
ÿ
ÿrh   c                 C   sÖ  t  dddd¡\}}}}tjdd| d�}|j|||||fg|gd� | ¡ }tjdd| dd	�}|j|||||fg|gd� | ¡ }|d
 d d |d
 d d ksSJ ‚tjdd| ddd�}|j|||||fg|gd� | ¡ }tjdd| ddd�}|j|||||fg|gd� | ¡ }|d
 d d |d
 d d ks�J ‚tjdd| dddd�}|j|||||fg|gd� | ¡ }tjdd| dddd�}|j|||||fg|gd� | ¡ }|d
 d d |d
 d d kséJ ‚dS )zTest normalization.i   é   é@   r   úrank:pairwise©Ú	objectiver   r	   ©r   r   Úeval_qidF)rm   r   r	   Úlambdarank_normalizationr,   zndcg@32r-   ÚmeanT)rm   r   r	   Úlambdarank_pair_methodrp   r   )rm   r   r	   rr   rp   Úlambdarank_num_pair_per_sampleN)r7   r8   r:   r;   r<   rC   )r	   rM   rN   r   rP   rf   Úe0Úe1r(   r(   r)   Úrun_normalizationv   sj   ü$ûû$úú(rv   rm   c                 C   sè   |dkrt jddddd�\}}}}nt  dddd¡\}}}}tj|d| d�}|j|||||fg|gd	� | ¡ }tjd
d| dd�}|j|||||fg|gd	� | ¡ }t|d  ¡ ƒd d t|d  ¡ ƒd d }	}
|	|
ksrJ ‚dS )z(Test normalization by score differences.zrank:mapi   ri   rj   r   )r   r   rl   rn   rk   F)rm   r   r	   Úlambdarank_score_normalizationr,   r-   N)r7   r8   r:   r;   r<   rC   ÚlistÚvalues)r	   rm   rM   rN   r   rP   rf   rt   ru   Úm0Úm1r(   r(   r)   Úrun_score_normalization¸   s$   üþr|   )Ú__doc__Útypesr   Útypingr   Únumpyr@   rI   Úxgboostr:   r   r7   Úutilsr   r.   rZ   rh   rv   r|   r(   r(   r(   r)   Ú<module>   s   MB