
    ^iH                         d Z ddlmZm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 dd	lmZ d
eddfdZd
eddfdZd
eddfdZ G d de      Zy)z*Tests related to the `DataIter` interface.    )CallableOptionalN)testing   )import_cupy)DataIterDMatrixExtMemQuantileDMatrixQuantileDMatrix   )predictor_equaldevicereturnc                    t        j                  ddd      \  }}}| j                  d      rt        j                  dddd      \  }}nt        j                  dddd      \  }}t        j                  ddd	d      \  }}|||g}|||g}	| j                  d      r(t	               }
|D cg c]  }|
j                  |       }}t        j                  ||	d
d
d      }t        |      }t        j                  dddd      \  }}|||g}|||g}	t        j                  |d      }t        j                  |	d      }t        ||      }t        ||      sJ y
c c}w )zCheck QDM with mixed batches.      Fcuda   g?T   g?Ncacheon_hostr   )axis)tmmake_regression
startswithmake_sparse_regressionr   arrayIteratorForTestr   npconcatenater   )r   X_0y_0_X_1y_1X_2y_2XycpbatchitXy_0X_arry_arrXy_1s                    Z/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/xgboost/testing/data_iter.pyrun_mixed_sparsityr3      sQ   $$S"e4KCa ,,S"c4@S,,S"c5AS((b#t<HC	c3A	c3A ]*+,RXXe_,,			Aq$dE	BB2D((b#t<HC	c3A	c3ANN11%ENN11%E5%(D4&&& -s   (Ec                      G  fddt               } |       }ddl}|j                  t        d      5  t	        |d       ddd       |j                  t        d      5  t        |d       ddd       |j                  t        d	      5  t        |d       ddd       y# 1 sw Y   dxY w# 1 sw Y   CxY w# 1 sw Y   yxY w)
z3Check error message for inconsistent feature types.c                   >     e Zd Zd fdZdedeffdZddZ xZS )2check_invalid_cat_batches.<locals>._InvalidCatIterr   c                 4    t         |   d        d| _        y )Ncache_prefixr   )super__init___it)self	__class__s    r2   r;   z;check_invalid_cat_batches.<locals>._InvalidCatIter.__init__/   s    G$/DH    
input_datac           	          | j                   dk(  ryt        j                  ddddd| j                   dk(  rdnd	      \  }}d
k(  r*dd l}dd l}|j                  |      }|j                  |      } |||       | xj                   dz  c_         y)Nr   F@         g      ?r   g      ?)onehotsparsity	cat_ratior   datalabelr   T)r<   r   make_categoricalcudfcupy	DataFramer   )r=   r@   r)   r*   rL   rM   r   s         r2   nextz7check_invalid_cat_batches.<locals>._InvalidCatIter.next3   s    xx1}&&!%Q#CDAq NN1%JJqMAQ'HHMHr?   c                     d| _         y Nr   r<   r=   s    r2   resetz8check_invalid_cat_batches.<locals>._InvalidCatIter.resetI   s	    DHr?   r   N)	__name__
__module____qualname__r;   r   boolrO   rT   __classcell__)r>   r   s   @r2   _InvalidCatIterr6   .   s     		8 	 	,	r?   r[   r   Nz)Inconsistent number of categories between)matchT)enable_categoricalzInconsistent feature types)r   pytestraises
ValueErrorr
   r   r	   )r   r[   r-   r^   s   `   r2   check_invalid_cat_batchesra   +   s    ( < 
	B	z)T	U ;bT:; 
z)T	U 5t45 
z)E	F -t,- -; ;5 5- -s#   B&"B2B>&B/2B;>Cc           	         dD cg c]  }t        j                  |d| dk(         }}t        t        |       }t        j                  |d   |d   ddd	
      }t        |      }|j                         dk(  sJ |j                         t        d |d   D              k(  sJ t        |      }|j                         dk(  sJ |j                         t        d |d   D              k(  sJ yc c}w )z'Tests for having irregular data shapes.)r   r   i   r   r   )use_cupyr   r   Nr   Tr   c              3   :   K   | ]  }|j                   d      ywr   Nshape.0xs     r2   	<genexpr>z%check_uneven_sizes.<locals>.<genexpr>d        <aqwwqz<   c              3   :   K   | ]  }|j                   d      ywre   rf   rh   s     r2   rk   z%check_uneven_sizes.<locals>.<genexpr>h   rl   rm   )
r   r   listzipr   r	   num_colnum_rowsumr
   )r   	n_samplesbatchesunzipr-   Xys         r2   check_uneven_sizesrx   Y   s     * 	9b6V3CDG  gE			E!HeAhGT	RB	B::<2::<3<58<<<<<	r	"B::<2::<3<58<<<<<s   "C+c                   v     e Zd ZdZdededededededed	ed
ee   ddf fdZ	de
fdZdedefdZddZ xZS )CatIterz-An iterator for testing categorical features.n_samples_per_batch
n_features	n_batchesn_catsrF   rG   rE   r   r   r   Nc                   t         |   |	       || _        || _        ||z  }
t	        j
                  |
|||||      \  }}g g }}d}t        |      D ]V  }t        ||
|z
        }|j                  |||z   d d f   }|j                  |       |j                  ||||z           ||z  }X || _
        || _        || _        || _        d| _        y )Nr8   )n_categoriesrE   rG   rF   r   )r:   r;   r}   r   r   rK   rangeminilocappendxsysrj   r*   r<   )r=   r{   r|   r}   r~   rF   rG   rE   r   r   rt   catr*   r   r   prevr$   nr)   r>   s                      r2   r;   zCatIter.__init__n   s     	e,"')3	$$
Q RBy! 	(A'T)9:Aq!+,AIIaLIIatax()''D	( r?   c                 2    | j                   | j                  fS )zReturn the concatenated data.)rj   r*   rS   s    r2   xyz
CatIter.xy   s    vvtvv~r?   r@   c                 L   | j                   | j                  k(  ry| j                  | j                      | j                  | j                      }}| j                  dk(  r*dd l}dd l}|j                  |      }|j                  |      } |||       | xj                   dz  c_         y)NFr   r   rH   r   T)	r<   r}   r   r   r   rL   rM   rN   r   )r=   r@   r)   r*   rL   rM   s         r2   rO   zCatIter.next   s    88t~~%wwtxx $''$(("31;;& q!A

1A#Ar?   c                     d| _         y rQ   rR   rS   s    r2   rT   zCatIter.reset   s	    r?   rU   )rV   rW   rX   __doc__intfloatrY   strr   r;   tupler   r   rO   rT   rZ   )r>   s   @r2   rz   rz   k   s    7* * *
 * * * * * * }* 
*XE x D r?   rz   )r   typingr   r   numpyr    xgboostr   r   compatr   corer   r	   r
   r   utilsr   r   r3   ra   rx   rz    r?   r2   <module>r      se    0 %  !   L L "'s 't ':+-c +-d +-\=s =t =$Ch Cr?   