
    bi]b                     V
   U 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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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ZddlZddlm 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/m0Z0m1Z1  ejd                  d      Z3ddl3m4Z4 ddl5m6Z6  ejd                  d      Z7 ede8e9d      Z:de8fdZ;de9de:fdZ<de:fdZ=de:fdZ>de:fdZ?de:fdZ@de:fdZAde:fdZBde:fdZCde:fd ZDde:fd!ZEde:fd"ZFde:fd#ZGde:fd$ZHde:fd%ZIde:fd&ZJde:fd'ZKde:fd(ZLde:fd)ZMde:fd*ZNde:fd+ZOde:fd,ZPd-ede:fd.ZQde:fd/ZR G d0 d1e"j                  j                        ZUd2eVd3eVd4e8dee%e%e%f   fd5ZWd6eVd3eVd7eVd8eXdeee j                     eej                     eej                     f   f
d9Z[ G d: d;      Z\	 dd2eVd3eVd=eVd>eVd?e8deej                  ej                  ej                  ej                  f   fd@Z]de4j                  fdAZ_ e_       Z`e4j                  eadB<    e4j                   e\dCdD dEdF       e\dGdH dEdF       e\dIdJ dEdF       e\dKdL dEdF       e\dMdN dEdF      g      ZcdOe4j                  deg e4j                  e\   f   fdPZdde4j                  e\   fdQZe e4j                   e\dRe-dSdT       e\dUdV dEdF       e\dWdX dYdZ      g      Zf  edef             Zgdd[eeX   d\eXde8fd]Zhdd[eeX   d\eXde8fd^Zid_e"j                  d`e"j                  de8fdaZk edbe"j                  e"j                        Zndcej                  dde"j                  deej                  ej                  f   fdeZodfej                  dde"j                  dge8dee9ej                  f   fdhZq	 ddiej                  djej                  dge8dej                  fdkZrdiej                  djej                  deXfdlZsdmej                  dej                  fdnZt	 ddoeVd4e8dpe9dqe9de'f
drZu	 ddiej                  dsej                  dteej                     deej                  ej                  f   fduZv G dv dw      Zwedeeeef   ddf   fdx       Zxd<dydzeVd-ed{e8d|edef
d}Zyd~edej                  ddfdZ{de9de9fdZ|de9de9fdZ}de9de9fdZ~de9dee"j                  e"j                  f   fdZde9de9fdZdeVdedef   d-ed|eddf
dZdeee9eVf      deVdee9   fdZde8fdZy)zkUtilities for defining Python tests. The module is private and subject to frequent
change without notice.

    N)contextmanager)StringIOsystem)AnyCallableDict	GeneratorListOptionalSequenceSetTuple	TypedDictTypeVarUnion)sparse)RabitTracker)	ArrayLike)SklObjective   )PathLike   )get_california_housing
get_cancer
get_digits
get_sparsemake_batchesmake_categoricalmake_sparse_regression
hypothesis)
strategies)arrayszsklearn.datasets
PytestSkip	conditionreasonreturnc                     t               dvryt        j                  r	 t        j                  t        j                  t        j                        5 } t        j                  t        j                  t        j                        5 }| j                  d       | j                         d   }| j                          |j                  d|f       | j                         \  }}|j                  dj                                |j                  d      j                         }|dk(  sJ 	 ddd       ddd       y	y# 1 sw Y   xY w# 1 sw Y   y	xY w# t        $ r Y yw xY w)
z+Check whether IPv6 is enabled on this host.)LinuxWindowsF)::1r   r   r,   abc   NT)r   sockethas_ipv6AF_INET6SOCK_STREAMbindgetsocknamelistenconnectacceptsendallencoderecvdecodeOSError)serverclientportconn_msgs         S/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/xgboost/testing/__init__.pyr0   r0   @   s    x++	!3!3 $v8J8JK$OUJ'))+A.t}- --/au||~.iil))+ e|#|$ $  %$ $ $  		sH   2E 3EB D8&E.E 8E	=EE	E E 	EEnamec                 T    t         j                  j                  |       }|d u |  ddS )Nz is not installed.r%   )	importlibutil	find_spec)rD   specs     rC   no_modrJ   ]   s-    >>##D)DD69K1LMM    c                      t                ddS )zPyTest skip mark for IPv6.zIPv6 is required to be enabled.r%   )r0    rK   rC   no_ipv6rN   b   s    %Z3TUUrK   c                  "    t               dk7  ddS )Nr*   zLinux is required.r%   r   rM   rK   rC   	not_linuxrP   g   s    W,8LMMrK   c                      t        d      S )NubjsonrJ   rM   rK   rC   	no_ubjsonrT   k       (rK   c                      t        d      S )NsklearnrS   rM   rK   rC   
no_sklearnrX   o       )rK   c                      t        d      S )NdaskrS   rM   rK   rC   no_daskr\   s       &>rK   c                      t        d      S )NlokyrS   rM   rK   rC   no_lokyr`   w   r]   rK   c                  `    t         j                  j                  d      rdddS t        d      S )NwinUnsupported platform.Tr'   r&   dask_mlsysplatform
startswithrJ   rM   rK   rC   
no_dask_mlrj   {   s*    
||u%1EE)rK   c                      t         j                  j                  d      st         j                  j                  d      rdddS t        d      S )Nrb   darwinrc   Trd   pysparkrf   rM   rK   rC   no_sparkrn      s;    
||u%)@)@)J1EE)rK   c                      t        d      S )NpandasrS   rM   rK   rC   	no_pandasrq      rU   rK   c                      t        d      S )NpyarrowrS   rM   rK   rC   no_arrowrt      rY   rK   c                      t        d      S )NpolarsrS   rM   rK   rC   	no_polarsrw      rU   rK   c                  x    	 dd l m}  | j                  g dg dgg d       dddS # t        $ r dddcY S w xY w)	Nr   )r          @T)r   g      @F)abc)columnszFailed import modin.Trd   )modin.pandasrp   	DataFrameImportError)mds    rC   no_modinr      sK    E!
no6P -4@@  E0tDDEs   !( 99c                  F    d} 	 dd l m} d| dS # t        $ r d| dcY S w xY w)NzMatplotlib is not installed.r   Fr%   T)matplotlib.pyplotpyplotr   )r'   rA   s     rC   no_matplotlibr      s4    +F5%"f55 5!V445s   
   c                      t        d      S )N	dask_cudarS   rM   rK   rC   no_dask_cudar          +rK   c                      t        d      S )NcudfrS   rM   rK   rC   no_cudfr      r]   rK   c                      t        d      } | d   s5t               dk(  r(dd l}	 |j                  g d      j	                          | S | S # t
        $ r	 d| d<   Y | S w xY w)Ncupyr&   r+   r   )r   r   r.   T)rJ   r   r   arraysum	Exception)	skip_cupycps     rC   no_cupyr      sg    vI[!fh)&;	*HHY##% 9  	*%)Ik"	*s   !A AAc                      t        d      S )N	dask_cudfrS   rM   rK   rC   no_dask_cudfr      r   rK   c                      t        d      S )N
jsonschemarS   rM   rK   rC   no_json_schemar      s    ,rK   c                      t        d      S )NgraphvizrS   rM   rK   rC   no_graphvizr      s    *rK   c                      t        d      S )NrmmrS   rM   rK   rC   no_rmmr      s    %=rK   argsc                  L    d}d}| D ]  }|xs |d   }|d   s|d   } n ||dS )NF r&   r'   r%   rM   )r   r&   r'   args       rC   no_multipler      sK    IF 1[!1	{]F	
 #f55rK   c                      dt               dS )Nrc   rd   )
is_windowsrM   rK   rC   skip_winr      s    -JLIIrK   c                        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Z	de
defdZddZdeeej                   ej$                  f   eee   f   fdZ xZS )IteratorForTestzCIterator for testing streaming DMatrix. (external memory, quantile)FN)on_hostmin_cache_page_bytesXywcacher   r   r(   c                    t        |      t        |      k(  sJ || _        || _        || _        d| _        t
        |   |||       y )Nr   )cache_prefixr   r   )lenr   r   r   itsuper__init__)selfr   r   r   r   r   r   	__class__s          rC   r   zIteratorForTest.__init__   sR     1vQ!5 	 	
rK   
input_datac                 |   | j                   t        | j                        k(  ryt        j                  t
        d      5   || j                  | j                      | j                  | j                      d        d d d         || j                  | j                      j                         | j                  | j                      j                         | j                  r'| j                  | j                      j                         nd        t        j                          | xj                   dz  c_         y# 1 sw Y   xY w)NFzKeyword argument)match)datalabelweightr   T)r   r   r   pytestraises	TypeErrorr   copyr   gccollect)r   r   s     rC   nextzIteratorForTest.next   s    77c$&&k!]]9,>? 	?tvvdggtww>	? 	%%'&&/&&(-1VV466$''?'')	

 	

1	? 	?s   9D22D;c                     d| _         y )Nr   )r   r   s    rC   resetzIteratorForTest.reset  s	    rK   c                    t        | j                  d   t        j                        r"t        j                  | j                  d      }n!t        j                  | j                  d      }t        j                  | j                  d      }| j                  r"t        j                  | j                  d      }nd }|||fS )Nr   csr)formataxis)	
isinstancer   r   
csr_matrixvstacknpconcatenater   r   )r   r   r   r   s       rC   	as_arrayszIteratorForTest.as_arrays  s     dffQi!2!23dffU3AtvvA.ANN466*66tvvA.AA!QwrK   r(   N)__name__
__module____qualname____doc__r   r   strboolintr   r   r   r   r   r   r   ndarrayr   r   r   r   __classcell__)r   s   @rC   r   r      s    M .2

 
 H	
 }
 
 'sm
 

*x D "	uRZZ!2!223Y@SS	TrK   r   	n_samples
n_featuresuse_cupyc                 B    t        | |d|      \  }}}|d   |d   |d   fS )z!Make a simple regression dataset.r   r   )r   )r   r   r   r   r   r   s         rC   make_regressionr     s3     9j!X>GAq!Q41qtrK   n_samples_per_batch	n_batchessparsityc           	      ~   g }g }g }t         j                  j                  d      }t        |      D ]  }t	        j                  | |d|z
  dt         j
                  |      }	|j                  |       }
|j                  dd|       }|j                  |	       |j                  |
       |j                  |        |||fS )N        ?r   )r   dtyperandom_stater   r   )lowhighsize)	r   randomRandomStateranger   float32randnuniformappend)r   r   r   r   r   r   r   rngrA   _X_y_ws               rC   make_batches_sparser     s     	A
A
A
))


%C9 ]](N**
 YY*+[[QQ-@[A			 a7NrK   c            
           e Zd ZdZdededededdf
dZd	eeef   deeef   fd
Z	de
j                  fdZdee   de
j                  fdZde
j                  fdZdefdZy)TestDatasetzPContains a dataset in numpy format as well as the relevant objective and metric.rD   get_dataset	objectivemetricr(   Nc                 r    || _         || _        || _         |       \  | _        | _        d | _        d | _        y N)rD   r   r   r   r   r   margin)r   rD   r   r   r   s        rC   r   zTestDataset.__init__:  s6     	"$'+,0rK   	params_inc                     | j                   |d<   | j                  |d<   | j                   dk(  r.t        t        j                  | j
                        dz         |d<   |S )Nr   eval_metricmulti:softmaxr   	num_class)r   r   r   r   maxr   )r   r  s     rC   
set_paramszTestDataset.set_paramsD  sP    !%	+#';;	- >>_,%(!);%<Ik"rK   c                     t        j                  | j                  | j                  | j                  | j
                  d      S )NT)r   base_marginenable_categorical)xgbDMatrixr   r   r   r  r   s    rC   get_dmatzTestDataset.get_dmatK  s2    {{FFFF66#
 	
rK   max_binc                 P   dd l }| j                  d n|j                  | j                        }|j                  | j                  t        j
                        }|j                  | j                  t        j
                        }t        j                  |||| j                  |      S )Nr   r   )r   r  r  )
r   r   r   r   r   r   r   r  QuantileDMatrixr  )r   r  r   r   r   r   s         rC   get_device_dmatzTestDataset.get_device_dmatT  sw    FFND(8HHTVV2::H.HHTVV2::H.""qW
 	
rK   c                    | j                   j                  d   }d}||z  dz   }g }g }g }t        |      D ]  }||z  }t        |dz   |z  |      }	|	|k7  sJ | j                   ||	df   }
| j                  ||	 }| j
                  | j
                  ||	 nd }|j                  |
       |j                  |       ||j                  |        t        |||r|nd dd      }t        j                  |      S )Nr   
   r   .r   F)r   r   )
r   shaper   minr   r   r   r   r  r  )r   r   r   	per_batch	predictorresponser   ibegendr   r   r   r   s                 rC   get_external_dmatzTestDataset.get_external_dmat^  s   FFLLO		*Q.		y! 
	!Ai-Cq1u	)95C#::s3w|$As3A#'66#5s34AQOOA}a 
	! F$
 {{2rK   c                     | j                   S r  )rD   r   s    rC   __repr__zTestDataset.__repr__{  s    yyrK   )r   r   r   r   r   r   r   r	   r   r	  r  r  r  r   r   r  r  r  r!  rM   rK   rC   r   r   7  s    Z11&.1;>1HK1	1DcN tCH~ 
#++ 

x} 
9L9L 
3;; :# rK   r   Tn_query_groupsmax_relsort_qidc                 v   t         j                  j                  d      }|j                  dd| |z        j	                  | |      }t        j
                  |d      }||j                         z  }t        j                  ||j                         z  |z        j                  t         j                        }|j                  d|| t         j                        }|j                  dd|      }	|	t        j                  |	      z  }	|	t        j                  |	      z  }	|rt        j                  |      }||||	fS )zMake a dataset for testing LTR.r   r   r   )r   r   r   )r   r   )r   r   default_rngnormalreshaper   r  roundr  astypeint32integerssort)
r   r   r"  r#  r$  r   r   r   qidr   s
             rC   make_ltrr/    s     ))


%C

1c	J 6
7??	:VA
qqALA
QUUWw&'..rxx8A
,,q.y,
IC

1c
/ANANAggclaa<rK   c            	          t         j                  dt        dt        t        t        t        t
        f   fd       } dt        t        t        t        t
        f   dt        fd} |        j                  |      S )Ndrawr(   c           	           | t        j                  dd            } | t        j                  dd            } | t        j                  dd            } | t        j                  ddddd            }||||fS )	Nr   i   r         r   F)	min_value	max_value	allow_nanallow_infinityallow_subnormal)r"   r,  floats)r1  r   r   n_catsr   s        rC   	_make_catz$_cat_sampled_from.<locals>._make_cat  s    ,,Q45	*--a34
j))!S12$ %
 *fh66rK   r   c           	      p    | d   | d   | d   | d   t         d d d fddd	      S )
Nr   r   r   r.   x-c                  $    t         d      S )NF)onehotr   )r   )r;  r   r   r   s   rC   <lambda>z3_cat_sampled_from.<locals>._build.<locals>.<lambda>  s    $:veh rK   reg:squarederrorrmse)r   )r   r;  r   r   r   s    @@@@rC   _buildz!_cat_sampled_from.<locals>._build  s[    G	!W
a7k:,axq
; 
 	
rK   )r"   	compositer   r   r   floatr   map)r<  rE  s     rC   _cat_sampled_fromrI    sj    7 7U3S%+?%@ 7 7
U3S%/0 
[ 
 ;??6""rK   categorical_dataset_strategyz1e5x8-0.95-csrc                  0    t        t        d      ddd      S )N     j@   gffffff?Fr    r   rM   rK   rC   rB  rB        *3s8QeD rK   rC  rD  z1e5x8-0.5-csrc                  0    t        t        d      ddd      S )NrL  rM        ?FrN  rM   rK   rC   rB  rB    s    *3s8QUC rK   z1e5x8-0.5-densec                  0    t        t        d      ddd      S )NrL  rM  rQ  TrN  rM   rK   rC   rB  rB    s    *3s8QTB rK   z1e5x8-0.05-csrc                  0    t        t        d      ddd      S )NrL  rM  皙?FrN  rM   rK   rC   rB  rB    rO  rK   z1e5x8-0.05-densec                  0    t        t        d      ddd      S )NrL  rM  rT  TrN  rM   rK   rC   rB  rB    s    *3s8QdC rK   unweighted_strategyc                 R     t         j                  dt        dt        f fd       }|S )zgFactory function for creating strategies that generates datasets with weight and
    base margin.

    r1  r(   c           
      @    |       } | t        j                               rN | t        t        j                  t        |j                        t        j                  dd                  |_         | t        j                               rd}|j                  dk(  r,t        t        j                  |j                        dz         }n4|j                  j                  d      r|j                  j                  d   } | t        t        j                  |j                  j                  d   |z  t        j                  dd	                  |_        |j                  J |dk7  r8|j                  j!                  |j                  j                  d   |      |_        |S )
Ng?ry   )elementsr   r  mtregr   rQ  r   )r"   booleansr#   r   float64r   r   r:  r   r   r   r  rD   ri   r  r  r(  )r1  r   r  rV  s      rC   weight_marginz0make_datasets_with_margin.<locals>.weight_margin  s4    !45
##%&rzzCK:;L;LSRU;VWDF 
##%&I~~0tvv 23	%%g. FFLLO	JJVV\\!_y0'..sC8DK ;;***A~"kk11$&&,,q/9MrK   )r"   rF  r   r   )rV  r]  s   ` rC   make_datasets_with_marginr^    s3     H   4 rK   c                     t        j                  t        dt        dd      t        dt        dd      t        dt        dd	      t        d
t
        dd      t        dt
        dd      t        dd dd      g      }  t        |              S )Ncalif_housingrC  rD  zcalif_housing-l1reg:absoluteerrormaecancerzbinary:logisticloglossr   z	sparse-l1emptyc                  V    t        j                  d      t        j                  d      fS )N)r   d   r   )r   re  rM   rK   rC   rB  z'make_dataset_strategy.<locals>.<lambda>  s    (+RXXa[9 rK   )r"   sampled_fromr   r   r   r   r^  )_unweighted_datasets_strategys    rC   make_dataset_strategyrj    s    $.$;$;!79KV "$:<OQV *.?K*.@&IZ1DeL9"		
%!& D$%BCEErK   digitsr  mloglossrZ  c                  2    t         j                  ddd      S Nr4  r   r.   )r   r   	n_targetsdatasetsr   rM   rK   rC   rB  rB  "      H,,sqTU,V rK   zmtreg-l1c                  2    t         j                  ddd      S rn  rp  rM   rK   rC   rB  rB  (  rr  rK   ra  rb  L	tolerancec           	      F    t        fdt        | | dd        D              S )Nc              3   4   K   | ]  \  }}||z
  k    y wr  rM   .0r>  r   ru  s      rC   	<genexpr>z!non_increasing.<locals>.<genexpr>6  s     =tq!A"=s   r   allziprt  ru  s    `rC   non_increasingr  5  s     =s1ae}===rK   c           	      F    t        fdt        | | dd        D              S )Nc              3   6   K   | ]  \  }}||z
   k\    y wr  rM   rx  s      rC   rz  z!non_decreasing.<locals>.<genexpr>:  s      ?AA9*$?s   r   r{  r~  s    `rC   non_decreasingr  9  s     ?Q!"???rK   lhsrhsc                 N   | j                         }|j                         }t        t        j                  |j                  |j                        t        j                  |j
                  |j
                        t        j                  |j                  |j                        f      S )z9Assert whether two DMatrices contain the same predictors.)get_datar|  r   array_equalr   indicesindptr)r  r  lcsrrcsrs       rC   predictor_equalr  =  sl    <<>D<<>DNN499dii0NN4<<6NN4;;4	
 rK   Mpredsdtrainc                 |    |j                         }ddt        j                  |        z   z  } | |z
  }| d| z
  z  }||fS )z#Binary regression custom objective.r   )	get_labelr   exp)r  r  labelsgradhesss        rC   	logregobjr  M  sJ    F3'(E6>DC%K D:rK   predtrev_linkc                    |j                         }|rddt        j                  |        z   z  } d| k  j                         r| dk  j                         sJ t        j                  | j
                        }| dkD  }| j                  dk(  rdt        j                  d      fS d||   z
  ||<   | dk  }||   ||<   dt        j                  |      fS )zEvaluation metric for xgb.train.

    Parameters
    ----------
    rev_link : Whether the metric needs to apply the reverse link function (activation).

    r           rQ  r   	CustomErrr   )	r  r   r  r|  zerosr  r   r\  r   )r  r  r  r   rgtles          rC   eval_error_metricr  V  s     EsRVVUF^+,5LUc\$6$6$888
A	BzzQBJJsO++b	MAbE	#B"IAbEq	!!rK   y_truey_scorec                 0   |rddt        j                  |       z   z  }d|k  j                         r|dk  j                         sJ t        j                  |j                        }|dkD  }d| |   z
  ||<   |dk  }| |   ||<   t        j
                  |      S )z>Evaluation metric that looks like metrics provided by sklearn.r   r  rQ  r   )r   r  r|  r  r  r   )r  r  r  r  r  r  s         rC   eval_error_metric_sklr  n  s    
 rvvwh//07N!w#~&:&:&<<<
A	3Br
NAbE	CB2JAbE66!9rK   c                 |    || z
  }t        j                  t        j                  ||      |j                  z        }|S r  )r   sqrtdotr   )r  r  errrD  s       rC   root_mean_squarer    s3    
F
C77266#s#gll23DKrK   r>  c                 \    t        j                  |       }|t        j                  |      z  S r  )r   r  r   )r>  es     rC   softmaxr    s!    
q	Arvvay=rK   classesordergdtypec                      |rddl nt        dj                  dj                  dt        j                  j                  f   f fd}|S )a5  Custom softprob objective for testing.

    Parameters
    ----------
    use_cupy :
        Whether the objective should return cupy arrays.
    order :
        The order of gradient matrices. "C" or "F".
    gdtype :
        DType for gradient. Hessian is not set. This is for testing asymmetric types.
    r   Nr  r  r(   c                    | j                   d   }j                  |ft        j                        }j                  |ft        j                        }d}t	        |j                   d         D ]  }| |   }t        ||d d f         }t	        |j                   d         D ]W  }	|dk\  s|k  sJ |	|k(  r||	   dz
  n||	   }
t        d||	   z  d||	   z
  z  j                         |      }|
|||	f<   ||||	f<   Y  |j                  |f      }|j                  |f      }j                  |      }j                  |      }||fS )	Nr   r  gư>r   r   ry   )requirementsr   )r  )
r  r  r   r   r   r  r  itemr(  require)r  r  rowsr  r  epsr  targetpr|   ghbackendr  r  r  s               rC   r   zsoftprob_obj.<locals>.objective  se    ||A}}dG_BJJ}?}}dG_BJJ}?u{{1~& 	AAYFad$A5;;q>* {f&777"#v+AaD3J1Q4qtsQqTz288:C@QT
QT
	 ||T7O,||T7O,t%vFt%8TzrK   )r   r   r   r   )r  r   r  r  r   r  s   ` `` @rC   softprob_objr    sT     (/	w/	0 . rK   y_predsample_weightc                 h    || z
  }t        j                  t        |             }|
||z  }||z  }||fS )zLeast squared error.)r   onesr   )r  r  r  r  r  s        rC   ls_objr    sC     F?D773v;D :rK   c                   :    e Zd ZdZd
dedefdZddZdeddfd	Z	y)DirectoryExcursionz\Change directory.  Change back and optionally cleaning up the directory when
    exit.

    pathcleanupc                     || _         t        j                   j                  t        j                   j                  t        j                   j                              | _        || _        t               | _        y r  )r  osnormpathabspathcurdirr  setfiles)r   r  r  s      rC   r   zDirectoryExcursion.__init__  sD    	gg&&rwwrww~~'FG"u
rK   r(   Nc                 h   t        j                  | j                         | j                  rt        j                  t         j                  j                  | j                              D ch c]-  \  }}}|D ]"  }t         j                  j                  ||      $ / c}}}}| _        y y c c}}}}w r  )r  chdirr  r  walk
expanduserjoinr  )r   rootsubdirr  fs        rC   	__enter__zDirectoryExcursion.__enter__  s    
<< ,.772773E3Edii3P+Q 'D&%  T1%%DJ s   -2B,
r   c                    t        j                  | j                         | j                  rt        j                  t         j
                  j                  | j
                              D ch c]-  \  }}}|D ]"  }t         j
                  j                  ||      $ / c}}}}}|j                  | j                        }|D ]  }t        j                  |        y y c c}}}}w r  )r  r  r  r  r  r  r  r  
differencer  remove)r   r   r  r  r  r  diffs          rC   __exit__zDirectoryExcursion.__exit__  s    
<< ,.772773E3Edii3P+Q 'D&%  T1%%E
 ##DJJ/D 		! s   -2C
Fr   )
r   r   r   r   r   r   r   r  r   r  rM   rK   rC   r  r    s2    
%X % %
c 
d 
rK   r  c               #   N  K   t               t               }} t        j                  t        j                  }}	 | |ct        _        t        _        t        j                  t        j                  f ||ct        _        t        _        y# ||ct        _        t        _        w xY ww)zReassign stdout temporarily in order to test printed statements
    Taken from:
    https://stackoverflow.com/questions/4219717/how-to-assert-output-with-nosetest-unittest-in-python

    Also works for pytest.

    N)r   rg   stdoutstderr)new_outnew_errold_outold_errs       rC   captured_outputr    sn       z8:WGzz3::WG2!('
CJjj#**$$!('
CJ'
CJs   5B%9B	 1B%	B""B%)enablesecr  kwargsc                    |r#t        j                  j                  | g|i |S t        j                  j                  dg|i |S )a   Make a pytest mark for the `pytest-timeout` package.

    Parameters
    ----------
    sec :
        Timeout seconds.
    enable :
        Control whether timeout should be applied, used for debugging.

    Returns
    -------
    pytest.mark.timeout
    N)r   marktimeout)r  r  r   r  s       rC   r  r    sE     {{""38888;;t5d5f55rK   rA   pytestconfigc           
          |j                  d      rft               d   rt        d      t               d   rt        d      dd l}ddlm} |j                  ddt        t         |                   	       y y )
Nz--use-rmm-poolr&   z2The --use-rmm-pool option requires the RMM packagez8The --use-rmm-pool option requires the dask_cuda packager   )
get_n_gpusTi   @)pool_allocatorinitial_pool_sizedevices)
	getoptionr   r   r   r   dask_cuda.utilsr  reinitializelistr   )rA   r  r   r  s       rC   setup_rmm_poolr    sv    ./8K RSS>+&J  	.0z|,- 	 	
 0rK   r  c                    t        t        j                  j                  |             } 	 t        j                  |       D cg c]  }|j                         s|j                  ! }}|D cg c]!  }t        j                  j                  |      # }}d|v r t        j                  j                  | d      S t        t        j                  j                  | t        j                  j                              }|| k7  sJ |} c c}w c c}w )z8Look for the demo directory based on the test file name.demo)	r  r  r  dirnamescandiris_dirbasenamer  pardir)r  r  subdirsdnew_paths        rC   demo_dirr    s    BGGOOD)*D
#%::d#3Baqxxz166BB0781277##A&88W77<<f--BGGLLrww~~>?4 B8s   DD+&Dc                 z    t         j                  j                  t         j                  j                  |             S r  )r  r  r  r  r  s    rC   r  r  *  s$    77BGGOOD122rK   c                 T    t         j                  j                  t        |       d      S )Nr   )r  r  r  r  r  s    rC   data_dirr  .  s    77<<//rK   c                     t        |       }t        j                  t        j                  j                  |d            }t        j                  t        j                  j                  |d            }||fS )Nz agaricus.txt.train?format=libsvmzagaricus.txt.test?format=libsvm)r  r  r  r  r  r  )r  dpathr  dtests       rC   load_agaricusr  2  sQ    TNE[[e-OPQFKKU,MNOE5=rK   c                     t        t        j                  j                  t	        |       t        j                  j
                              S r  )r  r  r  r  r  r  r  s    rC   project_rootr	  9  s(    BGGLL$@AArK   
world_sizetest_fn.c                   	 t        j                         	dt        t        t        t        t
        f   f   dd f	fd}t        d|       }|j                          g }t        |       D ]I  }t        j                  ||j                         f      }|j                  |       |j                          K |D ]:  }|j                          	j                         r$J d	j                                  |j!                          y )N	rabit_envr(   c                     	 t        j                  j                  di | 5   i  d d d        y # 1 sw Y   y xY w# t        $ r}j	                  |       Y d }~y d }~ww xY w)NrM   )r  
collectiveCommunicatorContextr   put)r  r  r   exception_queuer  r  s     rC   
run_workerz"run_with_rabit.<locals>.run_workerB  s_    	#33@i@ )(() ) ) 	#""	#s.   A  	4A  =A  A   	A$	AA$z	127.0.0.1)host_ip	n_workers)r  r   zWorker failed: )queueQueuer	   r   r   r   r   startr   	threadingThreadworker_argsr   r  re  getwait_for)
r
  r  r   r  r  trackerworkersrA   workerr  s
    ```     @rC   run_with_rabitr!  =  s     $);;=O#d3c3h#78 #T # # ;*EGMMOG: !!7;N;N;P:RSv  R$$&Q//:M:M:O9P(QQ&R rK   feature_namesc                 \    t        |      D cg c]  }| D ]	  }| d|   c}}S c c}}w )zBGet the global list of feature names from the local feature names..)r   )r"  r
  rankfeatures       rC   column_split_feature_namesr'  X  sC    
 ).j(9 $>E4&'  s   (c                  0    t        j                         dk(  S )z)Check if the current platform is Windows.r+   )rh   r   rM   rK   rC   r   r   a  s    ??	))rK   )T)g-C6?r  )FCr   r  )r   r   importlib.utilrF   r  rh   r  r/   rg   r  
contextlibr   ior   r   typingr   r   r	   r
   r   r   r   r   r   r   r   r   numpyr   r   scipyr   xgboostr  r   xgboost.corer   xgboost.sklearnr   _typingr   r   r   r   r   r   r   r   r    importorskipr!   r"   hypothesis.extra.numpyr#   rq  r   r   r$   r0   rJ   rN   rP   rT   rX   r\   r`   rj   rn   rq   rt   rw   r   r   r   r   r   r   r   r   r   r   r   coreDataIterr   r   r   rG  r   r   r   r   r/  SearchStrategyrI  rJ  __annotations__rh  sparse_datasets_strategyr^  rj  #_unweighted_multi_datasets_strategymulti_dataset_strategyr  r  r  r  BoosterXGBModelr  r  r\  r  r  r  r  r  r  r  r  r  Configr  r  r  r  r  r	  r!  r'  r   rM   rK   rC   <module>r@     s   
  	    
  %            " (    !V  .
 " )612|43%GH
$ :N N N
V V
N: N: J   J * : * : A* A5z 5j  
 
j  
  Z 
 6s 6z 6J* J8chh'' 8v #/3
9i*+*-:=IN
4!!"D$4d2::6FFG0E EZ   	
  2::rzz2::rzz9:.#:44 #D ;L:M j77 M2:22D		
 	C		
 	B		
 	D		
 	C		
3! H##22#b*++K889#PFz88E F. '>j&=&=Hj/:FV		
 	V		
' #&2'  
>huo >% >4 >@huo @% @4 @
 
3;; 
4 
 Ccll+RZZ  rzz2::?U9V "::""{{"6:"
3

?"2 ?DJJ!#7;ZZ"RZZ "**  rzz bjj  KT** *14*DG**\ SW	JJ	 "

	;CBJJ;O	
2::rzz!"	 D 258);#<dD#HI 2 2" 26 6 6S 6$ 6 6 6(
c 
 
4 
$
3 
3 
33 33 303 03 0 ckk3;;&> ? Bs Bs B&sCx09<HK	6c3h(69	#Y*D *rK   