o
    Ú­j*ˆ  ã                   @   s  d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZmZmZ ddl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' d
dl(m)Z)m*Z* d
dl+m,Z,m-Z- d
dl.m/Z0 er�ddl1m2Z3 neZ3e 4d¡Z5e5j6ddd�Z7de8de8deeeej9ej9f ee:e:f f ddf fdd„Z;defdd„Z<defdd„Z=deddfdd„Z>e7j?deej9ej9f fd d!„ƒZ@e7j?deej9ej9f fd"d#„ƒZAe7j?deej9ej9f fd$d%„ƒZBe7j?deej9ej9f fd&d'„ƒZCe7j?dee3ej9f fd(d)„ƒZDe7j?d*eEdee!jFej9ej9e!jFej9ej9e!jFej9ej9f	 fd+d,„ƒZG	-dld-d.d/œd0e8de8d1e8d2eHd3eHd4e8deeej9 eej9 eej9 f fd5d6„ZIee!jFejJejK ejJejK f ZLe	G d7d8„ d8ƒƒZMG d9d:„ d:eƒZNG d;d<„ d<ƒZOd=ejJejK deejJejJejJf fd>d?„ZP	@dmdAe!jFdBejJejK dCejJejK dDeQdejJejR f
dEdF„ZSdGee!jFejJejK ejJejK f dHejJejR deMfdIdJ„ZTdKeNdeeMeeM f fdLdM„ZUdAe!jFdBejJejK dCejJejK dNejJejK dOejJejV dee!jFejJejK ejJejK ejJejK f fdPdQ„ZWdRedSee& dTeEddfdUdV„ZXe7j?de8de8dWeQdXeHdeee!jF ej9f f
dYdZ„ƒZYd[e8d\e8deeE fd]d^„ZZd_d`d-d.ejVdadbœde8de8dce8ddeHdWeQdeeQdfeHd4e8dgej
j[dTeEdee,ej9f fdhdi„Z\G djdk„ dke%ƒZ]dS )nzUtilities for data generation.é    N)ÚThreadPoolExecutor)Ú	dataclass)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚ	GeneratorÚListÚ
NamedTupleÚOptionalÚSequenceÚSetÚTupleÚTypeÚUnion)Úrequest)Útyping)r   )Úsparseé   )Úconcat)ÚDataIterÚDMatrixÚQuantileDMatrix)Úis_pd_cat_dtypeÚpandas_pyarrow_mapper)Ú	ArrayLikeÚ	XGBRanker)Útrain)Ú	DataFrameÚjoblibz
./cachedir)ÚverboseÚ	n_samplesÚ
n_featuresÚreturnc                 c   sv  � t  d¡}tj d¡}|jdd| | d� | |¡}tjtjtj	tj
tjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjg}|D ]}tj||d�}||fV  | ¡ | ¡ fV  qF|D ]}tj||d�}| |¡}| |¡}	||	fV  q`|jdd| | d	� | |¡}tjt fD ]}
tj||
d�}||fV  qŒtjt fD ]}tj||d�}| |¡}| |¡}	||	fV  q d
S )z*Enumerate all supported dtypes from numpy.ÚpandaséÊ  r   é   ©ÚlowÚhighÚsize©Údtypeé   g      à?©r*   N)!ÚpytestÚimportorskipÚnpÚrandomÚRandomStateÚrandintÚreshapeÚint32Úint64ÚbyteÚshortÚintcÚint_ÚlonglongÚuint32Úuint64ÚubyteÚushortÚuintcÚuintÚ	ulonglongÚfloat16Úfloat32Úfloat64ÚhalfÚsingleÚdoubleÚarrayÚtolistr   ÚbinomialÚbool_Úbool)r!   r"   ÚpdÚrngÚorigÚdtypesr,   ÚXÚdf_origÚdfÚdtype1Údtype2© rX   úQ/var/www/html/CropPilot/venv/lib/python3.10/site-packages/xgboost/testing/data.pyÚ	np_dtypes1   s`   €
ÿì


ÿ

ürZ   c            
   	   c   sV  � t  d¡} |  ¡ |  ¡ |  ¡ |  ¡ |  ¡ |  ¡ |  ¡ |  	¡ g}t
j}| jdd|dgdd|dgdœt
jd�}t
jd| jfD ]}|D ]}| jdd|dgdd|dgdœ|d�}||fV  qAq=t
j}|  ¡ |  ¡ g}| jd	d
|dgdd
|d	gdœt
jd�}t
jd| jfD ];}|D ]6}| jd	d
|dgdd
|d	gdœ|d�}||fV  |d }|d }t|| jƒs®J ‚t|| jƒs¶J ‚||fV  q…q�| d¡}|jD ]}|| j t¡||< qÅt
jd| jfD ]}| jdd|dgdd|dgdœ|  ¡ d�}||fV  qÙd| jfD ].}dd|dgdd|dgdœ}	| j|	|du �rt
jn|  ¡ d�}| j|	|  ¡ d�}||fV  qúdS )z/Enumerate all supported pandas extension types.r$   r-   r   é   é   ©Úf0Úf1r+   Nç      ð?g       @g      @r^   ÚcategoryTF)r/   r0   Ú
UInt8DtypeÚUInt16DtypeÚUInt32DtypeÚUInt64DtypeÚ	Int8DtypeÚ
Int16DtypeÚ
Int32DtypeÚ
Int64Dtyper1   Únanr   rE   ÚNAÚFloat32DtypeÚFloat64DtypeÚ
isinstanceÚSeriesÚastypeÚcolumnsÚcatÚrename_categoriesÚintÚCategoricalDtyperM   ÚBooleanDtype)
rO   rR   ÚNullrQ   r,   rU   Úser_origÚserÚcÚdatarX   rX   rY   Ú	pd_dtypesl   sl   €
øÿÿüÿÿ
÷

þ"ûr|   c                  c   s0  � t  d¡} t  d¡}t}d| jdfD ]J}|D ]E}| d¡s#| d¡r$q|  |¡s/|dkr/|ntj}| jdd|d	gd
d	|dgdœtj	d�}| jdd|d	gd
d	|dgdœ|d�}||fV  qq| jdfD ]2}| jdd|dgdd|dgdœ|  
¡ d�}| jdd|dgdd|dgdœ|  | ¡ ¡d�}||fV  qcdS )z*Pandas DataFrame with pyarrow backed type.r$   ÚpyarrowNr   rD   rN   r-   r   r[   r\   r]   r+   FT)r/   r0   r   rk   Ú
startswithÚisnar1   rj   r   rE   rv   Ú
ArrowDtyperM   )rO   ÚparR   rw   r,   Ú	orig_nullrQ   rU   rX   rX   rY   Úpd_arrow_dtypes­   s:   €

þÿóþþ÷rƒ   rP   c                 C   s    | j dd� dd¡}| j dd�}tj|d< tjtdd�� t||ƒ W d  ƒ n1 s,w   Y  tjtdd�� t||ƒ W d  ƒ dS 1 sIw   Y  dS )	zValidate there's no inf in X.é    r.   é   r\   )é   r   zInput data contains `inf`©ÚmatchN)	r2   r5   r1   Úinfr/   ÚraisesÚ
ValueErrorr   r   )rP   rS   ÚyrX   rX   rY   Ú	check_infç   s   
ÿ"ÿr�   c                     s  d‰ t j d¡‰t d¡} dtt dtt dtt dt jf‡ ‡fdd	„}d
tdtdt jf‡ ‡fdd„}|  |ddgddgddgƒ|ddgddgddgƒ|ddd�|ddd�|dd d�|d!d"d�|d#d$d�|d%d&d�|d'd(d�d)œ	¡}||j	 
d*g¡  ¡ }|d*  ¡ }||fS )+zõSynthesize a dataset similar to the sklearn California housing dataset.

    The real one can be obtained via:

    .. code-block::

        import sklearn.datasets

        X, y = sklearn.datasets.fetch_california_housing(return_X_y=True)

    i P  ié  r$   ÚmeansÚsigmasÚweightsr#   c                    sX   ˆj tˆ |d  ƒ| d |d d�}ˆj ˆ |jd  | d |d d�}tj||gdd�S )Nr   )r*   ÚlocÚscaler-   ©Úaxis)Únormalrt   Úshaper1   Úconcatenate)rŽ   r�   r�   Úl0Úl1©r!   rP   rX   rY   Úmixture_2comp  s
   ÿ"z-get_california_housing.<locals>.mixture_2compÚmeanÚstdc                    s   ˆj | |ˆ fd�S )N©r‘   r’   r*   )r•   ©rœ   r�   rš   rX   rY   Únorm  s   z$get_california_housing.<locals>.normg5�øÅ€„]Àg~(FÖv^Àgrþ-|Eé?g3mE^ã1ç?g½Di-Tã?gÃ…v-¥WÙ?gËXcÜëB@g&	™–î@@gŒ6¿ñ?gÅÍþ¤](à?g8W ¼nxÜ?gdÔï¡ÈÃá?gæ|Ø["÷@gÏôÞ2{eþ?rŸ   gV»bµ£<@g›ÃÉ>¦+)@gæÌZµK·@gˆþÔÜûÊ@g)PÞ=û‹ñ?gÇË§^TÞ?gƒ¾ /èE–@g¶›É½±‘@gI•ø¦³�@gt£bO‡Å$@ggä°9hŒ @g ¤k}vò?)	Ú	LongitudeÚLatitudeÚMedIncÚHouseAgeÚAveRoomsÚ	AveBedrmsÚ
PopulationÚAveOccupÚMedHouseValr©   )r1   r2   Údefault_rngr/   r0   r	   ÚfloatÚndarrayr   rq   Ú
differenceÚto_numpy)rO   r›   r    rU   rS   rŒ   rX   rš   rY   Úget_california_housingô   sH   
ÿÿÿþ	ýý






ïÿr¯   c                  C   s   t  d¡} |  ¡ }|j|jfS )z&Fetch the digits dataset from sklearn.úsklearn.datasets)r/   r0   Úload_digitsr{   Útarget)Údatasetsr{   rX   rX   rY   Ú
get_digits,  s   
r´   c                  C   s   t  d¡} | jdd�S )z-Fetch the breast cancer dataset from sklearn.r°   T)Ú
return_X_y)r/   r0   Úload_breast_cancer)r³   rX   rX   rY   Ú
get_cancer4  s   
r·   c            	      C   sŠ   t  d¡} tj d¡}d}d}| j||d�\}}| d||j¡}t|jd ƒD ]}t|jd ƒD ]}|||f r?tj	|||f< q0q'||fS )zGenerate a sparse dataset.r°   éÇ   iÐ  g      è?)Úrandom_stater-   r   )
r/   r0   r1   r2   r3   Úmake_regressionrL   r–   Úrangerj   )	r³   rP   ÚnÚsparsityrS   rŒ   ÚflagÚiÚjrX   rX   rY   Ú
get_sparse;  s   
€þrÁ   c               
      sÂ  t rddl‰nt d¡‰tj d¡‰d‰ ˆ ¡ } dtt	t
tf tf dtdˆjf‡ ‡‡fd	d
„}|ddddddœdƒ| d< |ddddœdƒ| d< |dddddœdƒ| d< |dd d!d"d#d$d%d&œdƒ| d'< |d(d)d*d"d+œd,ƒ| d-< |d.d)d/d0d1d#d2d3d4œdƒ| d5< |d6d7d8d9d:d;œd<ƒ| d=< |d>d?d@dAd%dBœdƒ| dC< |dDdEdd#dFœdƒ| dG< |dAdHdHdIœdJƒ| dK< dLtdMtdtdˆjf‡ ‡‡fdNdO„}|dPdQdƒ| dR< |dSdTdƒ| dU< |dVdWdƒ| dX< |dYdZdƒ| d[< |d\d]dƒ| d^< |d_d`dƒ| da< |dbdcdƒ| dd< |dedfdƒ| dg< |dhdidƒ| dj< |dkdldƒ| dm< t| jƒ}ˆ |¡ | | } tjˆ fdn�}| jD ]"}t| | jˆjƒ�rD|| | jj tj¡7 }�q*|| | j7 }�q*|do| ¡  9 }|dp| ¡  7 }| |fS )qam  Get a synthetic version of the amse housing dataset.

    The real one can be obtained via:

    .. code-block::

        from sklearn import datasets

        datasets.fetch_openml(data_id=42165, as_frame=True, return_X_y=True)

    Number of samples: 1460
    Number of features: 20
    Number of categorical features: 10
    Number of numerical features: 10
    r   Nr$   r%   i´  Ú
name_probaÚdensityr#   c           	         s¤   t ˆ d|  ƒ}t d| ¡dko|dk}|r d| }|| tj< t|  ¡ ƒ}t|  ¡ ƒ}|d  dt |¡ 7  < ˆj|ˆ |d�}ˆj	|ˆ 
tdd„ |ƒ¡d	�}|S )
Nr-   r`   ç�íµ ÷Æ°>r   éÿÿÿÿ)r*   Úpc                 S   s
   t | tƒS ©N)rn   Ústr)ÚxrX   rX   rY   Ú<lambda>x  s   
 z5get_ames_housing.<locals>.synth_cat.<locals>.<lambda>r+   )rt   r1   Úabsrj   ÚlistÚkeysÚvaluesÚsumÚchoicero   ru   Úfilter)	rÂ   rÃ   Ún_nullsÚhas_nanr½   rÍ   rÆ   rÉ   Úseries©r!   rO   rP   rX   rY   Ú	synth_catf  s    
þþz#get_ames_housing.<locals>.synth_catgqu Ä]½ê?gqh”.ý³?gs½m¦B<¢?gö5Cª(ž?goEb‚¾•?)Ú1FamÚ2fmConÚDuplexÚTwnhsÚTwnhsEr`   ÚBldgTypegÿwD…Ú?g. �Ò¥Ò?g)$™Õ;ÜÎ?)ÚUnfÚRFnÚFingš_Í‚9î?ÚGarageFinishg¸Wæ­ºÇ?gàºbFx{°?gàºbFx{ ?gQfƒL2rf?)ÚCornerÚCulDSacÚFR2ÚFR3Ú	LotConfiggŠãÀ«åÎí?g/°ŒØ—?g˜Âƒf×½•?g�$A¸
…?gØó5Ëe£ƒ?g()° ¦l?g[³ÐÎiF?)ÚTypÚMin2ÚMin1ÚModÚMaj1ÚMaj2ÚSevÚ
Functionalg ©MœÜïâ?gì�±¾�Ó?gì¿ÎM›q¶?)ÚNoneÚBrkFaceÚStoneÚBrkCmng3ùf›Óï?Ú
MasVnrTypeg3ùf›Óß?gI/j÷« »?gÏ,	PSË¦?gÇeÜÔ@ó™?gQ¡º¹øÛ~?góZ	Ý%qv?)Ú1StoryÚ2Storyz1.5FinÚSLvlÚSFoyerz1.5Unfz2.5Unfz2.5FinÚ
HouseStyleg$	ÂP¨Ð?gHÀèòæpË?gýøK‹ú$—?g‡¥�Õ�?g‡4*p²Œ?)ÚGdÚTAÚFaÚExÚPog»E`¬oàà?ÚFireplaceQugÈ™&l?ì?çš™™™™™¹?gØó5Ëe£“?gÿunÚŒÓ`?)rù   rø   rú   rû   rü   Ú	ExterCondgn0Ôa…Ûã?g{g´UIdÕ?)rù   rø   rû   rú   Ú	ExterQualgÖ8›Ž nV?)rø   rû   rú   g(îx“ß¢s?ÚPoolQCr‘   r�   c                    sd   ˆj | |ˆ d�}tˆ d|  ƒ}t d| ¡dkr*|dkr*ˆjˆ |dd�}tj||< ˆj|tjd�S )	Nrž   r-   r`   rÄ   r   F©r*   Úreplacer+   )r•   rt   r1   rË   rÐ   rj   ro   rF   )r‘   r�   rÃ   rÉ   rÒ   Únull_idxrÕ   rX   rY   Ú	synth_numÝ  s   
z#get_ames_housing.<locals>.synth_numgmt‚žÖF@gOfK“<Q=@Ú	3SsnPorchgÝ¹sçÎ�ã?g2TÁf¡ä?Ú
FireplacesgR×áö u­?gP$Í[r�Î?ÚBsmtHalfBathgˆvS�Ø?g_Æ-£à?ÚHalfBathgbÄˆ#Fü?g†–+êç?Ú
GarageCarsg$á[Q<@g"$#eœú?ÚTotRmsAbvGrdg$á[Q<º{@g%�³Ç‘�|@Ú
BsmtFinSF1ge0ÇôOFG@g*Óš{7*d@Ú
BsmtFinSF2gŽNÐÓÚ­—@g�¡CÓ×k€@Ú	GrLivAreagóg6.@gò‘äûòàK@ÚScreenPorch©r–   güìÎ(eó@gåý.‘ÉA)r   r$   r/   r0   r1   r2   rª   r   r   r   rÈ   r«   ro   rÌ   rq   ÚshuffleÚzerosrn   r,   ru   rr   Úcodesrp   rF   rÎ   r�   rœ   )rU   rÖ   r  rq   rŒ   rz   rX   rÕ   rY   Úget_ames_housingL  sî   

ÿÿþûø
ÿüù	ù	öüù	ø
õûø
ûø
üù	ýú$


r  Údpathc              	   C   sÊ   t  d¡}d}tj | d¡}tj |¡stj||d� t 	|d¡�}|j
| d� W d  ƒ n1 s2w   Y  |jtj | d¡tj | d	¡tj | d
¡fddd�\	}}}}}	}
}}}|||||	|
|||f	S )zFetch the mq2008 dataset.r°   z>https://s3-us-west-2.amazonaws.com/xgboost-examples/MQ2008.zipz
MQ2008.zip)ÚurlÚfilenameÚr)ÚpathNzMQ2008/Fold1/train.txtzMQ2008/Fold1/test.txtzMQ2008/Fold1/vali.txtTF)Úquery_idÚ
zero_based)r/   r0   Úosr  ÚjoinÚexistsr   ÚurlretrieveÚzipfileÚZipFileÚ
extractallÚload_svmlight_files)r  r³   Úsrcr²   ÚfÚx_trainÚy_trainÚ	qid_trainÚx_testÚy_testÚqid_testÚx_validÚy_validÚ	qid_validrX   rX   rY   Ú
get_mq2008  sH   
ÿýùö÷r/  Fr%   )Ú	vary_sizer¹   Ún_samples_per_batchÚ	n_batchesÚuse_cupyr0  r¹   c                C   s¨   g }g }g }|rddl }	|	j t |¡¡}
ntj |¡}
t|ƒD ].}|r*| |d  n| }|
 ||¡}|
 |¡}|
jdd|d�}| |¡ | |¡ | |¡ q |||fS )zMake batches of dense data.r   Né
   r-   r'   )	Úcupyr2   r3   r1   r>   r»   ÚrandnÚuniformÚappend)r1  r"   r2  r3  r0  r¹   rS   rŒ   Úwr5  rP   r¿   r!   Ú_XÚ_yÚ_wrX   rX   rY   Úmake_batches<  s    




r=  c                   @   sl   e Zd ZU dZejed< eje	j
 ed< eje	j
 ed< eje	j ed< eje	j
 ed< eje	j ed< dS )	Ú	ClickFoldzCA structure containing information about generated user-click data.rS   rŒ   ÚqidÚscoreÚclickÚposN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú
csr_matrixÚ__annotations__ÚnptÚNDArrayr1   r6   rE   r7   rX   rX   rX   rY   r>  ]  s   
 
r>  c                   @   s8   e Zd ZU dZeed< eed< eed< defdd„ZdS )	Ú	RelDataCVzPSimple data struct for holding a train-test split of a learning to rank dataset.r   ÚtestÚmax_relr#   c                 C   s
   | j dkS )z6Whether the label consists of binary relevance degree.r-   )rM  ©ÚselfrX   rX   rY   Ú	is_binaryp  s   
zRelDataCV.is_binaryN)	rC  rD  rE  rF  ÚRelDatarH  rt   rN   rP  rX   rX   rX   rY   rK  i  s   
 rK  c                   @   sP   e Zd ZdZdeddfdd„Zdejej	 dejej
 dejej	 fd	d
„ZdS )ÚPBMa  Simulate click data with position bias model. There are other models available in
    `ULTRA <https://github.com/ULTR-Community/ULTRA.git>`_ like the cascading model.

    References
    ----------
    Unbiased LambdaMART: An Unbiased Pairwise Learning-to-Rank Algorithm

    Úetar#   Nc                 C   s0   t  g d¢¡| _t  g d¢¡}t  ||¡| _d S )N)rþ   g{®GázÄ?çìQ¸…ëÑ?g¤p=
×£à?r`   )
gÃõ(\�Âå?g…ëQ¸…ã?g¸…ëQ¸Þ?gÃõ(\�ÂÕ?rT  çš™™™™™É?g)\�Âõ(¼?rþ   g{®Gáz´?g¸…ëQ¸®?)r1   rJ   Ú
click_probÚpowerÚ	exam_prob)rO  rS  rX  rX   rX   rY   Ú__init__  s
   ÿzPBM.__init__ÚlabelsÚpositionc           	      C   sÎ   t j|dd�}t  |j¡}d||dk < d||t| jƒk< | j| }t  |j¡}|j|jks/J ‚t j|dd�}d||| jjk< | j| }t j 	d¡}|j|jd t j
d�}t j|jt jd�}d|||| k < |S )	z©Sample clicks for one query based on input relevance degree and position.

        Parameters
        ----------

        labels :
            relevance_degree

        T)Úcopyr   rÅ   r%   )r*   r,   r+   r-   )r1   rJ   r  r–   ÚlenrV  r*   rX  r2   rª   rE   r6   )	rO  rZ  r[  rV  rX  ÚranksrP   ÚprobÚclicksrX   rX   rY   Úsample_clicks_for_queryˆ  s   

zPBM.sample_clicks_for_query)rC  rD  rE  rF  r«   rY  rI  rJ  r1   r6   r7   ra  rX   rX   rX   rY   rR  u  s    		
ÿ
ÿ
þrR  rÉ   c              	   C   s‚   t  | ¡} | j}t jdt  t j| dd… | dd… dd� ¡d f }t  t j||f ¡}| | }t  |t  | jg¡¡}|||fS )zzRun length encoding using numpy, modified from:
    https://gist.github.com/nvictus/66627b580c13068589957d6ab0919e66

    r   r-   NrÅ   T)Ú	equal_nan)	r1   Úasarrayr*   Úr_ÚflatnonzeroÚiscloseÚdiffr8  rJ   )rÉ   r¼   ÚstartsÚlengthsrÎ   ÚindptrrX   rX   rY   Úrlencode¬  s   
6
rk  rþ   rS   rŒ   r?  Úsample_ratec                 C   s°   t j d¡}t| jd | ƒ}t jd| jd t jd�}| |¡ |d|… }| | }|| }|| }	t  |	¡}
||
 }||
 }|	|
 }	t	ddd�}|j
|||	d� | | ¡}|S )	z«We use XGBoost to generate the initial score instead of SVMRank for
    simplicity. Sample rate is set to 0.1 by default so that we can test with small
    datasets.

    r%   r   r+   Nz	rank:ndcgÚhist)Ú	objectiveÚtree_method)r?  )r1   r2   rª   rt   r–   Úaranger>   r  Úargsortr   ÚfitÚpredict)rS   rŒ   r?  rl  rP   r!   ÚindexÚX_trainr'  r(  Ú
sorted_idxÚltrÚscoresrX   rX   rY   Úinit_rank_score»  s    


ry  ÚfoldÚscores_foldc                 C   s  | \}}}|j tjksJ ‚t |¡}tj|jftjd�}tj|jftjd�}tdd�}|D ].}	|	|k}
|
 |
j	d ¡}
||
 }t 
|¡ddd… }|||
< ||
 }| ||¡}|||
< q-|j	d |j	d ksnJ |j	|j	fƒ‚|j	d |j	d ks€J |j	|j	fƒ‚t||||||ƒS )zSimulate clicks for one fold.r+   r`   )rS  r   NrÅ   )r,   r1   r6   ÚuniqueÚemptyr*   r7   rR  r5   r–   rq  ra  r>  )rz  r{  ÚX_foldÚy_foldÚqid_foldÚqidsr[  r`  ÚpbmÚqÚqid_maskÚquery_scoresÚquery_positionÚrelevance_degreesÚquery_clicksrX   rX   rY   Úsimulate_one_foldß  s$   



$$r‰  Úcv_datac                    sÞ  t t| j| jƒƒ\}}}t dgdd„ |D ƒ ¡‰t ˆ¡‰tˆƒdks&J ‚t 	|¡}t 
|¡}t 
|¡}t|||ƒ‰‡‡fdd„tdˆjƒD ƒ}g g g g g g f\‰ ‰‰‰‰‰tˆjd ƒD ]6}t|| || || f|| ƒ}	ˆ  |	j¡ ˆ |	j¡ ˆ |	j¡ ˆ |	j¡ ˆ |	j¡ ˆ |	j¡ q^‡fdd„tˆjd ƒD ƒ}
tdƒD ]}|
| || k ¡ sµJ ‚q§tˆ ƒdkr×tˆ d ˆd ˆd ˆd ˆd ˆd ƒ}d	}||fS ‡ ‡‡‡‡‡fd
d„ttˆ ƒƒD ƒ\}}||fS )z6Simulate click data using position biased model (PBM).r   c                 S   s   g | ]}|j d  ‘qS )r   r  )Ú.0ÚvrX   rX   rY   Ú
<listcomp>  s    z#simulate_clicks.<locals>.<listcomp>r[   c                    s$   g | ]}ˆˆ |d   ˆ | … ‘qS )r-   rX   ©r‹  r¿   )rj  Úscores_fullrX   rY   r�    s   $ r-   c                    s   g | ]}ˆ | ‘qS rX   rX   rŽ  )Ús_lstrX   rY   r�    s    r   Nc              	   3   s:   � | ]}t ˆ | ˆ| ˆ| ˆ| ˆ| ˆ| ƒV  qd S rÇ   )r>  rŽ  )ÚX_lstÚc_lstÚp_lstÚq_lstr�  Úy_lstrX   rY   Ú	<genexpr>&  s
   € (ÿ
ÿz"simulate_clicks.<locals>.<genexpr>)rÌ   Úzipr   rL  r1   rJ   Úcumsumr]  r   Úvstackr—   ry  r»   r*   r‰  r8  rS   rŒ   r?  r@  rA  rB  Úallr>  )rŠ  rS   rŒ   r?  ÚX_fullÚy_fullÚqid_fullrx  r¿   rz  Úscores_check_1r   rL  rX   )r‘  r’  rj  r“  r”  r�  r�  r•  rY   Úsimulate_clicks  s:   



 *ü

þrŸ  r`  rB  c              
   C   sj  t  |¡}| | } || }|| }|| }t|ƒ\}}}td|jƒD ]Š}||d  }	|| }
|	|
k s8J |	|
fƒ‚t  ||	|
… ¡jdksJJ |	|
fƒ‚||	|
… }| ¡ dks\J | ¡ ƒ‚| ¡ |jd kswJ | ¡ |j|t  ||	|
… ¡fƒ‚t  |¡}| |	|
… | | |	|
…< ||	|
… | ||	|
…< ||	|
… | ||	|
…< ||	|
… | ||	|
…< q"| |||f}|S )z,Sort data based on query index and position.r-   r   )r1   rq  rk  r»   r*   r|  ÚminÚmax)rS   rŒ   r?  r`  rB  rv  rj  Ú_r¿   ÚbegÚendÚ	query_posr{   rX   rX   rY   Úsort_ltr_samples-  s4   
$ü
r¦  ÚDTypeÚDMatrixTÚdevicec                 C   sô  t j ¡ }| |jdddd� t j¡ dd¡ƒ}t|dƒr&|jdd…df }n|dd…df }|}||||d	�}t	j
td
d�� td|dœ|ƒ W d  ƒ n1 sQw   Y  t|dƒsø| | ¡  dd¡ƒ}||k ¡ smJ ‚|jjjdu svJ ‚|jjjdu sJ ‚|j|jd	� | | ¡  dd¡ƒ}||jk ¡ s™J ‚|}| |¡ | ¡ }	| | d|j¡¡ | ¡ }
|
|	k ¡ sºJ ‚| t j¡}| |¡ | ¡ }||	k ¡ sÑJ ‚| dddd¡}t	j
td
d�� | |¡ W d  ƒ dS 1 sñw   Y  dS dS )zRun tests for base margin.r   r`   éd   r.   é2   r   ÚilocN)Úbase_marginz.*base_margin.*r‡   rm  )ro  r©  FTr-   r†   )r1   r2   rª   r•   rp   rE   r5   Úhasattrr¬  r/   rŠ   r‹   Útrain_fnÚget_base_marginrš  ÚTÚflagsÚc_contiguousÚf_contiguousÚset_infoÚset_base_marginr*   rF   )r§  r¨  r©  rP   rS   rŒ   r­  ÚXyÚgotÚbm_colÚbm_rowÚbm_f64rX   rX   rY   Úrun_base_margin_info^  sB   
$
ÿ


"ÿår¼  r½   Úas_densec                    sÊ  t tjdƒs$tj d¡}tjˆˆ dˆ |dd�}|jddˆd�}||fS tt ¡ ˆ ƒ‰dt	d	tj
f‡ ‡‡‡fd
d„}g }tˆd��}	tˆƒD ]}
| |	 ||
¡¡ qFW d  ƒ n1 s\w   Y  g }g }|D ]}| ¡ \}}| |¡ | |¡ qgt|ƒˆks‚J ‚tj|dd�}t |¡}| |jd |jd f¡j}tj|dd�}|jd ˆks¬J ‚|jd ˆ ksµJ ‚|jd ˆks¾J ‚|rá| ¡ }|jd ˆksÍJ ‚|jd ˆ ksÖJ ‚tj||dk< ||fS ||fS )z�Make sparse matrix.

    Parameters
    ----------

    as_dense:

      Return the matrix as np.ndarray with missing values filled by NaN

    rª   r%   r`   Úcsr)Úmr¼   rÃ   r¹   Úformatç        rž   Út_idr#   c                    sÄ   t j d|  ¡}ˆ ˆ }| ˆd krˆ | |  }n|}tjˆ|dˆ |d� ¡ }t  ˆdf¡}t|jd ƒD ]'}|j|d  |j|  }|dkr]||d d …|f  	¡ | ˆdf¡ d 7 }q6||fS )Nr%   r-   r`   )r¿  r¼   rÃ   r¹   r   rU  )
r1   r2   rª   r   Útocscr  r»   r–   rj  Útoarray)rÂ  rP   Úthread_sizeÚn_features_tlocrS   rŒ   r¿   r*   ©r"   r!   Ú	n_threadsr½   rX   rY   Ú
random_csc«  s(   üû*€z*make_sparse_regression.<locals>.random_csc)Úmax_workersN)rÀ  r   r-   r“   )r®  r1   r2   r3   r   r•   r   ÚmultiprocessingÚ	cpu_countrt   Ú
csc_matrixr   r»   r8  ÚsubmitÚresultr]  Úhstackrc  r5   r–   r±  rÏ   rÄ  rj   )r!   r"   r½   r½  rP   rS   rŒ   rÉ  ÚfuturesÚexecutorr¿   Ú	X_resultsÚ	y_resultsr%  r¾  ÚarrrX   rÇ  rY   Úmake_sparse_regression�  sP   ûÿÿ

rÖ  Ú	n_stringsÚseedc                 C   s\   d}t ƒ }tj |¡}t|ƒ| k r*d |jttj	ƒ|dd�¡}| 
|¡ t|ƒ| k st|ƒS )zGenerate n unique strings.r…   Ú Tr  )Úsetr1   r2   rª   r]  r  rÐ   rÌ   ÚstringÚascii_lettersÚadd)r×  rØ  Úname_lenÚunique_stringsrP   Ú
random_strrX   rX   rY   Úunique_random_stringsã  s   ÿ
ürá  rÁ  r`   Úcpu)r½   Ú	cat_ratior  r¹   Ú	cat_dtyper©  Ún_categoriesÚonehotrã  r  rä  c                C   sH  t  d¡}
tj |¡}tj |d ¡}|
 ¡ }t|ƒD ]d}|jd|dd�d }|dkrkt |tj	¡rCt 
t||ƒ¡}|j|| dd�}nt d|¡}|jd|| d�}|
j|dd	�|t|ƒ< |t|ƒ j |¡|t|ƒ< q|jd|| d�}|
j||jd	�|t|ƒ< qtj| fd
�}|jD ]}t|| j|
jƒrž||| jj7 }qŠ||| 7 }qŠ|d7 }|dkrát|ƒD ]/}|jd| d t| | ƒd�}tj|j||f< t|jj| ƒrà|t |jj| j¡j ksàJ ‚q±|j!d |ksêJ ‚|rñ|
 "|¡}|�rt#|jƒ}| $|¡ || }|	dk�r |	dv �sJ ‚ddl%}ddl&}| '|¡}| 
|¡}||fS )a/  Generate categorical features for test.

    Parameters
    ----------
    n_categories:
        Number of categories for categorical features.
    onehot:
        Should we apply one-hot encoding to the data?
    sparsity:
        The ratio of the amount of missing values over the number of all entries.
    cat_ratio:
        The ratio of features that are categorical.
    shuffle:
        Whether we should shuffle the columns.
    cat_dtype :
        The dtype for categorical features, might be string or numeric.

    Returns
    -------
    X, y
    r$   r-   r.   r   Tr  r'   ra   r+   r  rÁ  râ  )ÚcudaÚgpuN)(r/   r0   r1   r2   r3   r   r»   rL   Ú
issubdtypeÚstr_rJ   rá  rÐ   rp  r4   ro   rÈ   rr   Úset_categoriesr,   r  rq   rn   ru   r  rt   rj   r¬  r   rR   r|  Ú
categoriesr*   r–   Úget_dummiesrÌ   r  Úcudfr5  Úfrom_pandas)r!   r"   rå  ræ  r½   rã  r  r¹   rä  r©  rO   rP   Úrow_rngrU   r¿   rÐ   rì  rz   ÚnumÚlabelÚcolrt  rq   rî  r5  rX   rX   rY   Úmake_categoricaló  sZ   
"
ÿ€





rô  c                       s–   e Zd ZdZdddœdededee dee d	ed
ee ddf‡ fdd„Z	de
defdd„Zddd„Zdeeejejf eee f fdd„Z‡  ZS )ÚIteratorForTestzCIterator for testing streaming DMatrix. (external memory, quantile)FN)Úon_hostÚmin_cache_page_bytesrS   rŒ   r9  Úcacherö  r÷  r#   c                   sB   t |ƒt |ƒks
J ‚|| _|| _|| _d| _tƒ j|||d� d S )Nr   )Úcache_prefixrö  r÷  )r]  rS   rŒ   r9  ÚitÚsuperrY  )rO  rS   rŒ   r9  rø  rö  r÷  ©Ú	__class__rX   rY   rY  V  s   

ýzIteratorForTest.__init__Ú
input_datac                 C   s´   | j t| jƒkr
dS tjtdd�� || j| j  | j| j  d ƒ W d   ƒ n1 s*w   Y  || j| j   ¡ | j| j   ¡ | jrI| j| j   ¡ nd d� t	 
¡  |  j d7  _ dS )NFzKeyword argumentr‡   )r{   rò  Úweightr-   T)rú  r]  rS   r/   rŠ   Ú	TypeErrorrŒ   r\  r9  ÚgcÚcollect)rO  rþ  rX   rX   rY   Únextk  s   ÿýzIteratorForTest.nextc                 C   s
   d| _ d S )Nr   )rú  rN  rX   rX   rY   Úreset|  s   
zIteratorForTest.resetc                 C   s:   t | jƒ}t | jƒ}| jrtj| jdd�}nd}|||fS )zReturn concatenated arrays.r   r“   N)r   rS   rŒ   r9  r1   r—   )rO  rS   rŒ   r9  rX   rX   rY   Ú	as_arrays  s   


zIteratorForTest.as_arrays)r#   N)rC  rD  rE  rF  r   r   rÈ   rN   rt   rY  r   r  r  r   r   r1   r¬   r   rG  r   r  Ú__classcell__rX   rX   rü  rY   rõ  S  s0    	øþýüúùø	÷
þrõ  )F)rþ   )^rF  r  rË  r  rÛ  r   Úconcurrent.futuresr   Údataclassesr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   Úurllibr   Únumpyr1   r/   rI  Únumpy.randomÚRNGÚscipyr   Úcompatr   Úcorer   r   r   r{   r   r   Úsklearnr   r   Útrainingr   r¯  r$   r   Ú
DataFrameTr0   r   ÚMemoryÚmemoryrt   r¬   rÌ   rZ   r|   rƒ   r�   rø  r¯   r´   r·   rÁ   r  rÈ   rG  r/  rN   r=  rJ  r6   rQ  r>  rK  rR  rk  r«   rE   ry  r‰  rŸ  r7   r¦  r¼  rÖ  rá  Ú	DTypeLikerô  rõ  rX   rX   rX   rY   Ú<module>   sV  <
ÿÿ(
þ;A:7 7ÿøÿþ<üùÿþýüúù
ø *7üÿ
þ
ýü

û$ÿ
þ
ý#+ÿ
þ
ý
ü
û


ýÿ
ú1/ÿÿÿÿþUõÿþýûúùø	÷
öõ
ô`