o
    Ú­j¡  ã                   @   s`   d Z ddlZddlZddlmZ ddlZddlm	Z	m
Z
 deddfdd	„Zdeddfd
d„ZdS )zQuantileDMatrix related tests.é    N)Útrain_test_splité   )Úmake_batchesÚmake_categoricalÚdeviceÚreturnc                 C   sÀ   dd„ t ddd|  d¡d�D ƒ\}}}t||ƒ\}}}}t ||¡}tj|||d�}	| ¡ }
|	 ¡ }tj |
d	 |d	 ¡ tj |
d |d ¡ t ||¡}	|	 ¡ }t 	|
d |d ¡r^J ‚d
S )z6Check obtaining the same cut values given a reference.c                 s   s   � | ]}|d  V  qdS )r   N© )Ú.0Údatar   r   ú]/var/www/html/CropPilot/venv/lib/python3.10/site-packages/xgboost/testing/quantile_dmatrix.pyÚ	<genexpr>   s
   € ÿ
ÿz)check_ref_quantile_cut.<locals>.<genexpr>i    é   r   Úcuda)Ún_samples_per_batchÚ
n_featuresÚ	n_batchesÚuse_cupy)Úrefr   N)
r   Ú
startswithr   ÚxgbÚQuantileDMatrixÚget_quantile_cutÚnpÚtestingÚassert_allcloseÚallclose)r   ÚXÚyÚ_ÚX_trainÚX_validÚy_trainÚy_validÚXy_trainÚXy_validÚ	cut_trainÚ	cut_validr   r   r   Úcheck_ref_quantile_cut   s$   üþ
r'   c              	   C   sì   | dkr
t  d¡}nt  d¡}d}tdd|dtjdd	d
�\}}| |¡}tj||d	d�}| ¡ dks4J ‚| 	¡ }|d }|d }t
dt|ƒƒD ],}	|	d }
t||j|
  j|jƒrs||
 ||	 }}|||… }tj |t d|¡¡ qGdS )zCheck string inputs.ÚcpuÚpandasÚcudfé    i   é   Fg      à?T)ÚonehotÚ	cat_dtypeÚ	cat_ratioÚshuffle)Úenable_categoricalr   r   N)ÚpytestÚimportorskipr   r   Ústr_Ú	DataFramer   r   Únum_colr   ÚrangeÚlenÚ
isinstanceÚcolumnsÚdtypeÚCategoricalDtyper   r   Úarange)r   ÚpdÚn_categoriesr   r   ÚXyÚcutsÚindptrÚvaluesÚiÚf_idxÚbegÚendÚcolr   r   r   Úcheck_categorical_strings'   s6   

ù
	€ûrI   )Ú__doc__Únumpyr   r2   Úsklearn.model_selectionr   Úxgboostr   r
   r   r   Ústrr'   rI   r   r   r   r   Ú<module>   s    