
    bi&                         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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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        j                  ||      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concatenatepredictor_equal)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                    T/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/xgboost/testing/data_iter.pyrun_mixed_sparsityr2      sW   $$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dD))) -s   (Ec                       G  fddt               } |       }ddl}|j                  t        d      5  t	        |d       ddd       y# 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    r1   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label   T)r;   r   make_categoricalcudfcupy	DataFramer   )r<   r?   r(   r)   rL   rM   r   s         r1   nextz7check_invalid_cat_batches.<locals>._InvalidCatIter.next2   s    xx1}&&!%Q#CDAq NN1%JJqMAQ'HHMHr>   c                     d| _         y Nr   r;   r<   s    r1   resetz8check_invalid_cat_batches.<locals>._InvalidCatIter.resetH   s	    DHr>   r   N)	__name__
__module____qualname__r:   r   boolrO   rT   __classcell__)r=   r   s   @r1   _InvalidCatIterr5   -   s     		8 	 	,	r>   r[   r   Nz*Inconsistent feature types between batches)matchT)enable_categorical)r   pytestraises
ValueErrorr
   )r   r[   r,   r^   s   `   r1   check_invalid_cat_batchesra   *   sL    ( < 
	B	z)U	V ;bT:; ; ;s   AA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   rJ   Nr   Tr   c              3   :   K   | ]  }|j                   d      ywr   Nshape.0xs     r1   	<genexpr>z%check_uneven_sizes.<locals>.<genexpr>]        <aqwwqz<   c              3   :   K   | ]  }|j                   d      ywre   rf   rh   s     r1   rk   z%check_uneven_sizes.<locals>.<genexpr>a   rl   rm   )
r   r   listzipr   r	   num_colnum_rowsumr
   )r   	n_samplesbatchesunzipr,   Xys         r1   check_uneven_sizesrx   R   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_catsrE   rF   rD   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 )Nr7   )n_categoriesrD   rF   rE   r   )r9   r:   r}   r   r   rK   rangeminilocappendxsysrj   r)   r;   )r<   r{   r|   r}   r~   rE   rF   rD   r   r   rt   catr)   r   r   prevr#   nr(   r=   s                      r1   r:   zCatIter.__init__g   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    r1   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   rG   rJ   T)	r;   r}   r   r   r   rL   rM   rN   r   )r<   r?   r(   r)   rL   rM   s         r1   rO   zCatIter.next   s    88t~~%wwtxx $''$(("31;;& q!A

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