
    siiH                         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dS )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          \  }}}|                     d          rt          j        dddd          \  }}nt          j        dddd          \  }}t          j        ddd	d          \  }}|||g}|||g}	|                     d          rt	                      fd
|D             }t          j        ||	ddd          }
t          |
          }t          j        dddd          \  }}|||g}|||g}	t          j        |d          }t          j        |	d          }t          ||          }t          ||          sJ dS )zCheck QDM with mixed batches.      Fcuda   g?T   g?c                 :    g | ]}                     |          S  )array).0batchcps     _/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/xgboost/testing/data_iter.py
<listcomp>z&run_mixed_sparsity.<locals>.<listcomp>   s#    ,,,RXXe__,,,    Ncacheon_hostr   )axis)
tmmake_regression
startswithmake_sparse_regressionr   IteratorForTestr   npconcatenater   )r   X_0y_0_X_1y_1X_2y_2XyitXy_0X_arry_arrXy_1r   s                  @r   run_mixed_sparsityr8      s}   $S"e44KCa   B,S"c4@@SS,S"c5AAS(b#t<<HC	c3A	c3A   -]],,,,!,,,		Aq$dE	B	B	BB2D(b#t<<HC	c3A	c3AN11%%%EN11%%%E5%((D4&&&&&&&r   c                      G  fddt                     } |            }ddl}|                    t          d          5  t	          |d           ddd           n# 1 swxY w Y   |                    t          d          5  t          |d           ddd           n# 1 swxY w Y   |                    t          d	          5  t          |d           ddd           dS # 1 swxY w Y   dS )
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   Nc                 Z    t                                          d            d| _        d S )Ncache_prefixr   )super__init___it)self	__class__s    r   r@   z;check_invalid_cat_batches.<locals>._InvalidCatIter.__init__/   s)    GG$///DHHHr   
input_datac           	          | j         dk    rdS t          j        ddddd| j         dk    rdnd	          \  }}d
k    r2dd l}dd l}|                    |          }|                    |          } |||           | xj         dz  c_         dS )Nr   F@         g      ?r   g      ?)onehotsparsity	cat_ratior   datalabelr   T)rA   r#   make_categoricalcudfcupy	DataFramer   )rB   rD   r1   r2   rP   rQ   r   s         r   nextz7check_invalid_cat_batches.<locals>._InvalidCatIter.next3   s    x1}}u&!%Q##C  DAq NN1%%JJqMMJAQ''''HHMHH4r   c                     d| _         d S Nr   rA   rB   s    r   resetz8check_invalid_cat_batches.<locals>._InvalidCatIter.resetI   s    DHHHr   r   N)	__name__
__module____qualname__r@   r   boolrS   rX   __classcell__)rC   r   s   @r   _InvalidCatIterr;   .   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_   r3   rb   s   `   r   check_invalid_cat_batchesre   +   s         (   < 
		BMMM	z)T	U	U ; ;bT::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 
z)T	U	U 5 5t44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
z)E	F	F - -t,,,,- - - - - - - - - - - - - - - - - -s6   AA#&A#B$$B(+B(C**C.1C.c                      fddD             }t          t          |           }t          j        |d         |d         ddd          }t	          |          }|                                d	k    sJ |                                t          d
 |d         D                       k    sJ t          |          }|                                d	k    sJ |                                t          d |d         D                       k    sJ dS )z'Tests for having irregular data shapes.c                 F    g | ]}t          j        |d dk              S )r   r   )use_cupy)r#   r$   )r   	n_samplesr   s     r   r   z&check_uneven_sizes.<locals>.<listcomp>[   s@        	9b6V3CDDD  r   )r   r   i   r   r   Nr    Tr   r   c              3   0   K   | ]}|j         d          V  dS r   Nshaper   xs     r   	<genexpr>z%check_uneven_sizes.<locals>.<genexpr>d   (      <<aqwqz<<<<<<r   c              3   0   K   | ]}|j         d          V  dS rk   rl   rn   s     r   rp   z%check_uneven_sizes.<locals>.<genexpr>h   rq   r   )	listzipr#   r'   r	   num_colnum_rowsumr
   )r   batchesunzipr3   Xys   `    r   check_uneven_sizesr{   Y   s      )  G gE		E!HeAhGT	R	R	RB	B::<<2::<<3<<58<<<<<<<<<	r	"	"B::<<2::<<3<<58<<<<<<<<<<<r   c                   |     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_catsrJ   rK   rI   r   r    r   Nc                   t                                          |	           || _        || _        ||z  }
t	          j        |
|||||          \  }}g g }}d}t          |          D ]e}t          ||
|z
            }|j        |||z   d d f         }|	                    |           |	                    ||||z                       ||z  }f|| _
        || _        || _        || _        d| _        d S )Nr=   )n_categoriesrI   rK   rJ   r   )r?   r@   r   r   r#   rO   rangeminilocappendxsysro   r2   rA   )rB   r~   r   r   r   rJ   rK   rI   r   r    ri   catr2   r   r   prevr,   nr1   rC   s                      r   r@   zCatIter.__init__n   s     	e,,,"')3	$
 
 
Q RBy!! 	( 	(A'T)9::Aq!!!+,AIIaLLLIIatax()))''DDr   c                     | j         | j        fS )zReturn the concatenated data.)ro   r2   rW   s    r   xyz
CatIter.xy   s    vtv~r   rD   c                 &   | j         | j        k    rdS | j        | j                  | j        | j                  }}| j        dk    r2dd l}dd l}|                    |          }|                    |          } |||           | xj         dz  c_         dS )NFr   r   rL   r   T)	rA   r   r   r   r   rP   rQ   rR   r   )rB   rD   r1   r2   rP   rQ   s         r   rS   zCatIter.next   s    8t~%%5wtx $'$("31;&  KKKKKKq!!A

1A
####Atr   c                     d| _         d S rU   rV   rW   s    r   rX   zCatIter.reset   s    r   rY   )rZ   r[   r\   __doc__intfloatr]   strr   r@   tupler   r   rS   rX   r^   )rC   s   @r   r}   r}   k   s        77* * *
 * * * * * * }* 
* * * * * *XE    x D           r   r}   )r   typingr   r   numpyr(   xgboostr   r#   compatr   corer   r	   r
   r   utilsr   r   r8   re   r{   r}   r   r   r   <module>r      s.   0 0 % % % % % % % %     ! ! ! ! ! !             L L L L L L L L L L L L " " " " " "'s 't ' ' ' ':+-c +-d +- +- +- +-\=s =t = = = =$C C C C Ch C C C C Cr   