
    ^ic                     t   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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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!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB ddlCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK erddlLZMdd	lNmOZP dd
lNmQZR eej                  ee*   ee+   f   ZTeeUd<   dZVddhZWde)dee,   ddfdZXde)ddfdZYde)deZfdZ[de)deZde)fdZ\eFj                  dde)de,de^dee*   dee+   deFdeTfdZ_de)deZfdZ`eFj                  dde)de,de^dee*   dee+   deFdeTfdZade)deZfdZbde)deej                     fd Zdde)d!ee-   dej                  fd"ZeeFj                  ddej                  de,de^dee*   dee+   deFdeTfd#Zfd$d$d$d$d$d$d$d$d%d%d%d&d'Zgd$d$d$d$d$d$d$d$d%d%d&d(Zhd$d$d$d$d$d$d$d$d%d%d%d%d&d)Ziegj                  eh       egj                  ei       d*Zkde)ddfd+Zldd,d-eem   dee*   dee+   d.eZdeee*   ee+   f   fd/Znd!e.deZfd0Zod!edeZfd1Zpd!edeZfd2Zqej                  de	e.geZf   fd3       Zsd!e.deZfd4Ztej                  de	e.geZf   fd5       Zud!e.deZfd6Zvd7edej                  fd8Zwej                  deZfd9       Zxej                  deyfd:       Zzdd,deeej                  ef      fd;Z{ G d< d=e      Z|	 	 	 d|dd,d.eZdee*   deee+ef      d-eem   dee|ee*   ee+   f   fd>Z}de)d?emd!ee-   d@ej                  ddf
dAZ~eFj                  ddd,d.eZde,de^dee*   deee+ef      deFdeTfdBZde)d?emd!ee-   d@ej                  ddf
dCZde)de,de^d.eZdee*   dee+   deTfdDZ G dE dFe      ZddGd.eZdee*   deee+ef      deeee*   ee+   f   f
dHZeFj                  fde)d.eZde,dIe^dee*   deee+ef      deFdeTfdJZej                  de
e)emf   fdK       Zde)deeem   ef   fdLZde)d?emd!ee-   d@ej                  ddf
dMZd}dNZde)d.eZdee*   deee+ef      deeee*   ee+   f   f
dOZeFj                  fde)d.eZde,dIe^dee*   deee+ef      deFdeTfdPZej                  de	egeZf   fdQ       Zej                  de	egeZf   fdR       Z G dS dTe      Zde)dee*   deee+ef      d.eZdeeee*   ee+   f   f
dUZde)de,de^dee*   deee+ef      d.eZdeTfdVZde)deZfdWZde)de(fdXZde)de,de^dee*   dee+   deTfdYZde)deZfdZZde)deZfd[Zde)deZfd\Zde)deZfd]Zde)de,de^dee*   dee+   deTfd^Zde)dee/   fd_ZeFj                  fde/dee,   dee*   dee+   deFdeTfd`Zde)dee   fdaZeFj                  ddede,dIe^dee*   dee+   deFdeTfdbZde)deey   fdcZeFj                  ddede,dIe^dee*   dee+   deFdeTfddZde)deeE   fdeZde)deZfdfZde)de)fdgZdheFj                  dide)de,dje^dee*   deee+ef      d.eZdeFdeTfdkZde)d?emddfdlZdej                  dmemd!ee-   d@ej                  ddf
dnZdedmemd!ee-   d@ej                  ddf
doZdedmemd!ee-   d@ej                  ddf
dpZde)dmemd@ej                  ddfdqZde)dmemd@ej                  ddfdrZde)dmemd@ej                  ddfdsZ	 d~dteGde)d?emd!ee-   ddf
duZ G dv dweE      Zde)dee*   dee+   d.eZde0f
dxZdedeZfdyZdzeIde)ddfd{Zy)zData dispatching for DMatrix.    N)TYPE_CHECKINGAnyCallableDictListOptionalSequenceTuple	TypeAlias	TypeGuardUnion   )AifType
CategoriesDfCatAccessorTransformedDf_arrow_array_inf_ensure_np_dtype
_is_df_catarray_hasobjectarray_interfacearray_interface_dictarrow_cat_infcheck_cudf_metacuda_array_interfacecuda_array_interface_dictcudf_cat_infget_ref_categoriesis_arrow_dict
pd_cat_inf)
CupyTDataTypeFeatureNamesFeatureTypesFloatCompatible
NumpyDTypePandasDTypePathLikeTransformedDatac_bst_ulong)	_is_arrow_is_cudf_df_is_cudf_pandas_is_cudf_ser_is_modin_df_is_modin_series_is_pandas_df_is_pandas_series
_is_polars_is_polars_lazyframe_is_polars_seriesimport_pandasimport_polarsimport_pyarrowis_pyarrow_availablelazy_isinstance)_LIBDataIterDataSplitModeDMatrix_check_call_ProxyDMatrixc_strmake_jcargs)	DataFrame)SeriesDispatchedDataBackendReturnTypecbase_marginlabeldatamissingreturnc                     |Ft        j                  |      s0t        j                  dt	        t        |             z   t               y y y )Nz2`missing` is not used for current input data type:)npisnanwarningswarnstrtypeUserWarning)rI   rJ   s     M/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/xgboost/data.py_warn_unused_missingrU   g   s:    bhhw&7@3tDz?R	
 '8    c                 d    t        | d      r$t        | j                        dk7  rt        d      y y )Nshape   z8Please reshape the input data into 2-dimensional matrix.)hasattrlenrX   
ValueErrorrI   s    rT   _check_data_shaper^   o   s/    tW#djj/Q"6STT #7rV   c                     d}d}	 ddl m} t        | |      }	 ddl m} t        | |      }|xs |S # t        $ r Y $w xY w# t        $ r Y  w xY w)zPredicate for scipy CSR input.Fr   )	csr_array)
csr_matrix)scipy.sparser`   
isinstanceImportErrorra   )rI   is_array	is_matrixr`   ra   s        rT   is_scipy_csrrg   t   h    HI*dI.+tZ0	  y        1 A  	== 	AAis_csrc                    ddl m}m} t        | j                        t        | j
                        k7  r7t        dt        | j                         dt        | j
                               t        | j                  | j                  j                        \  }}t        | j                  | j                  j                        \  }}t        | j
                  | j
                  j                        \  }}|| j                  us|| j                  us|| j
                  ur2|r ||||f| j                        } | S  ||||f| j                        } | S )zxEnsure correct data alignment and data type for scipy sparse inputs. Input should
    be either csr or csc matrix.

    r   )
csc_matrixra   zlength mismatch: z vs )rX   )rb   rl   ra   r[   indicesrI   r\   r   indptrdtyperX   )rI   rj   rl   ra   rn   _rm   valuess           rT   transform_scipy_sparserr      s   
 4
4<<C		N*,S->,?tC		NCSTUU dkk.?.?@IFA!$,,0B0BCJGQ DIIOO<IFAdkk!$,,&"vw7tzzJD K vw7tzzJDKrV   )data_split_modenthreadfeature_namesfeature_typesrs   c                    t        j                         }t        | d      } t        t	        j
                  t        | j                        t        | j                        t        | j                        t        | j                  d         t        t        |      t        |      t        |            t        j                  |                   |||fS )z"Initialize data from a CSR matrix.Tr   rJ   rt   rs   )ctypesc_void_prr   r?   r;   XGDMatrixCreateFromCSRr   rn   rm   rI   r*   rX   rB   floatintbyrefrI   rJ   rt   ru   rv   rs   handles          rT   _from_scipy_csrr      s     __F!$-D##DKK(DLL)DII&

1&gG #O 4
 LL 	
 =-//rV   c                     d}d}	 ddl m} t        | |      }	 ddl m} t        | |      }|xs |S # t        $ r Y $w xY w# t        $ r Y  w xY w)zPredicate for scipy CSC input.Fr   )	csc_array)rl   )rb   r   rc   rd   rl   )rI   re   rf   r   rl   s        rT   is_scipy_cscr      rh   ri   c                    t        j                         }t        | d       t        t	        j
                  t        | j                        t        | j                        t        | j                        t        | j                  d         t        t        |      t        |      t        |            t        j                  |                   |||fS )z"Initialize data from a CSC matrix.Fr   rx   )ry   rz   rr   r?   r;   XGDMatrixCreateFromCSCr   rn   rm   rI   r*   rX   rB   r|   r}   r~   r   s          rT   _from_scipy_cscr      s     __F4'##DKK(DLL)DII&

1&gG #O 4
 LL 	
 =-//rV   c                     d}d}	 ddl m} t        | |      }	 ddl m} t        | |      }|xs |S # t        $ r Y $w xY w# t        $ r Y  w xY w)zPredicate for scipy COO input.Fr   )	coo_array)
coo_matrix)rb   r   rc   rd   r   )rI   re   rf   r   r   s        rT   is_scipy_coor      rh   ri   c                     t        | d      S )N__array_interface__rZ   r]   s    rT   _is_np_array_liker     s    4.//rV   ro   c                     	 | j                   j                  st        j                  | d|      } nt        j                  | |      } t        | |      \  } }| S # t
        $ r t        j                  | |      } Y 3w xY w)zGHandle numpy slice.  This can be removed if we use __array_interface__.T)copyro   ro   )flagsc_contiguousrM   arrayasarrayAttributeErrorr   )rI   ro   s     rT   _maybe_np_slicer     sn    -zz&&88Dt59D::d%0D #4/KD%K  -zz$e,-s   AA  A<;A<c                 B   t        |        t        | | j                        \  } }t        j                         }t        t        j                  t        |       t        t        |      t        |      t        |            t        j                  |                   |||fS )z(Initialize data from a 2-D numpy matrix.rx   )r^   r   ro   ry   rz   r?   r;   XGDMatrixCreateFromDenser   rB   r|   r}   r~   )rI   rJ   rt   ru   rv   rs   rp   r   s           rT   _from_numpy_arrayr     s     dtTZZ0GD!__F%%D!gG #O 4
 LL 	

 =-//rV   r}   r|   i)int8int16int32int64uint8uint16uint32uint64float16float32float64bool)Int8Int16Int32Int64UInt8UInt16UInt32UInt64Float32Float64boolean)zint8[pyarrow]zint16[pyarrow]zint32[pyarrow]zint64[pyarrow]zuint8[pyarrow]zuint16[pyarrow]zuint32[pyarrow]zuint64[pyarrow]zfloat[pyarrow]zfloat32[pyarrow]zdouble[pyarrow]zfloat64[pyarrow]zbool[pyarrow]zpWhen categorical type is supplied, the experimental DMatrix parameter`enable_categorical` must be set to `True`.c                 L   t        | d      rvt        | j                  d      r`t        | j                        D cg c]+  \  }}|j                  t        vr| j
                  |    d| - }}}ddj                  |      z   }nd}d}| dt         d| }t        |      c c}}w )	Ndtypes__iter__z: z Invalid columns:z,  z?DataFrame.dtypes for data must be int, float, bool or category. )	rZ   r   	enumeratename_pandas_dtype_mappercolumnsjoin_ENABLE_CAT_ERRr\   )rI   r   ro   
bad_fieldserrtype_errmsgs          rT   _invalid_dataframe_dtyper   e  s     tX74;;
#C &dkk2
5zz!55 ||Ar%)

 

 "DIIj$99PHj/*!C5
3C
S/
s   0B PdDataFramemetaenable_categoricalc                     t               }||t        | j                  |j                        rB| j                  D cg c]*  }dj	                  |D cg c]  }t        |       c}      , }}}n(t        | j                  j                  t
                    }g }d}	| j                  D ]  }
t        |
      rG|j                  t        |
j                  j                            |	s=t        j                  d       d}	Ut!        |
      st#        |
      r|r|j                  t$               	 |j                  t        |
j                             |||}||fS c c}w c c}}w # t&        $ r t)        |        Y w xY w)z)Handle feature info for pandas dataframe.r   Tz3Sparse arrays from pandas are converted into dense.F)r6   rc   r   
MultiIndexr   rQ   listmapr   is_pd_sparse_dtypeappendr   subtyper   rO   rP   is_pd_cat_dtypeis_pa_ext_categorical_dtypeCAT_TKeyErrorr   )rI   r   ru   rv   r   pdr   xnew_feature_typesneed_sparse_extension_warnro   s              rT   pandas_feature_infor   w  sI    
B dllBMM2DHLLQqSXXq&9!s1v&9:QMQ !1!1#!67M !% /e$$$%9%--:L:L%MN)ST-2*E"&A%&H $$U+/!(()=ejj)IJ/  )-''5 ':Q(  /(./s)   E E$	E -"E&E &E=<E=c                    ddl m} t        | |      syddlm}m}m}  ||       xr | j                  t        v } ||       xr | j                  dk(  } ||       xr | j                  t        v }|xs |xs |xs t        |       S )z(Whether dtype is a pandas nullable type.r   )ExtensionDtypeF)is_bool_dtypeis_float_dtypeis_integer_dtyper   )
pandas.api.extensionsr   rc   pandas.api.typesr   r   r   r   pandas_nullable_mapperr   )ro   r   r   r   r   is_intis_boolis_floats           rT   is_nullable_dtyper     s~     5e^,PPe$M7M)MFE">uzzY'>Ge$M7M)MHBWBBOE,BBrV   c                     t        | d      S )z;Return whether dtype is a pyarrow extension type for pandaspyarrow_dtyper   r   s    rT   is_pa_ext_dtyper     s    5/**rV   c                 2    t        t        | dd      dd      S )z)Check whether dtype is a dictionary type.r   Nzpyarrow.libDictionaryType)r:   getattrr   s    rT   r   r     s     -}>N rV   c                  >   t               } t        | j                  d      rut        | j                  j                  d      rU| j                  j                  j                  } || j
                         |d      k\  rddlm dt        dt        ffd}|S dd	l
m} |S )
NversionVersion2.1.0r   CategoricalDtypero   rK   c                     t        |       S Nrc   ro   r   s    rT   pd_is_cat_210z+_lazy_load_pd_is_cat.<locals>.pd_is_cat_210  s    !%)9::rV   is_categorical_dtype)r6   rZ   utilr   r   __version__pandasr   r'   r   r   r   )r   r   r   r   r   s       @rT   _lazy_load_pd_is_catr     sy    	Brww	"wrww	'J''//))2>>"gg&66/;[ ;T ; ! 5rV   c                 &    t               } ||       S )z)Wrapper for testing pandas category type.)r   )ro   is_cats     rT   r   r     s    !#F%=rV   c                  >   t               } t        | j                  d      rut        | j                  j                  d      rU| j                  j                  j                  } || j
                         |d      k\  rddlm dt        dt        ffd}|S dd	l
m} |S )
Nr   r   r   r   )SparseDtypero   rK   c                     t        |       S r   r   )ro   r   s    rT   pd_is_sparse_210z1_lazy_load_pd_is_sparse.<locals>.pd_is_sparse_210  s    !%55rV   )	is_sparse)r6   rZ   r   r   r   r   r   r   r'   r   r   r   )r   r   r   r   r   s       @rT   _lazy_load_pd_is_sparser    sy    	Brww	"wrww	'J''//))2>>"gg&66*6 6 6 $#*rV   c                 &    t               } ||       S )z'Wrapper for testing pandas sparse type.)r  )ro   r   s     rT   r   r     s    ')IUrV   serc                 b   t               }t        rddl}n
t               }| j                  }|j                         }|j                         }|j                  dk(  xr& |j                  j                  |j                         }|j                  |d      }t        ||j                        \  }}|S )z Handle pandas pyarrow extention.r   NF)zero_copy_onlywritable)r6   r   pyarrowr8   r   __arrow_array__combine_chunks
null_counttypes
is_booleanrR   to_numpyr   ro   )	r  r   pad_arrayaachunk	zero_copyarrrp   s	            rT   pandas_pa_typer    s    	B
 .1YYG $335B))+E  A%Mbhh.A.A%**.M*MI nnInNCc399-FCJrV   c                      t         j                  j                  t         j                        t         j                  j                  d      kD  S )Nz1.25.0)rM   libNumpyVersionr    rV   rT   _lazy_has_npdtypesr    s/    66r~~.1D1DX1NNNrV   c                      ddl m} m} | |fS )Nr   Float32DtypeFloat64Dtype)r   r  r  r  s     rT   _lazy_load_pd_floatsr    s    1%%rV   c                   	
 t               \  	g }t               dddt        fd}dddt        j                  f	
fd}dddt        j                  f
fd}t        | j                  | j                        D ]  \  }
t        
      rt        d      t        
      r|j                   || |                Ct        
      r|j                  t        | |                lt        
      r|j                   || |                t        
      rU| |   j                   }|j#                         }t%        |      rt'        ||j(                        \  }}|j                  |       |j                   || |                 |S )z9Handle categorical dtype and extension types from pandas.r  PdSeriesrK   c                     | j                   S r   )cat)r  s    rT   	cat_codesz(pandas_transform_data.<locals>.cat_codes$  s    wwrV   c                     t              rt        j                  }n-t              rt        j                  }nt        j                  }t	        | j                  |t        j                        |      d   S N)ro   na_valuer   )rc   rM   r   r   r   r  nan)r  	res_dtyper  r  ro   s     rT   nu_typez&pandas_transform_data.<locals>.nu_type'  s]    e\*$&JJI|,

I

ILLy266L:I

 	rV   c                    xrH t        | j                  t        j                  j                  t        j                  j
                  f      }|s"t        j                  t        j                  hv r| j                         }n/| j                  t        j                  t        j                        }t        ||j                        d   S r%  )rc   ro   rM   r   Float32DTypeFloat64DTyper   r   r  r'  r   )r  npdtypesr   ro   	np_dtypess      rT   oth_typez'pandas_transform_data.<locals>.oth_type3  s     
II 		&&		&&	"
 uRZZ 88LLNE LLrzzBFFLCEu{{3A66rV   zFpyarrow dictionary type is not supported. Use pandas category instead.)r  r  r   rM   ndarrayzipr   r   r   r\   r   r   r   r  r   r   rq   to_denser   r   ro   )rI   resultr#  r)  r/  colr  rp   r  r  ro   r.  s           @@@@rT   pandas_transform_datar5    s[    "6!7L,57F"$Iz m 
Z 
BJJ 
7j 7RZZ 7( $,,4 /
U&u-X  5!MM)DI./U#MM.c34u%MM'$s),-&s)""C,,.C %)#syy9QMM#MM(49-.%/. MrV   c                   z     e Zd ZdZdeeej                  ef      de	e
   ddf fdZedeeef   fd       Z xZS )PandasTransformedz1A storage class for transformed pandas DataFrame.r   ref_categoriesrK   Nc                    || _         g }| j                   D ]  }t        |      rSt        |j                  |j                        \  }}}| j
                  j                  |       |j                  ||f       at        |t        j                        sJ t        |      }|j                  |        t        	| 1  ||       y )Nr8  aitfs)r   r   r    
categoriescodestemporary_buffersr   rc   rM   r0  r   super__init__)
selfr   r8  r;  r4  jnamesjcodesbufinf	__class__s
            rT   r@  zPandasTransformed.__init__d  s    
  << 
	"C#&0&K#&&--c2ff-.!#rzz222*3/S!
	" 	eDrV   c                 \   t        | j                  d         r#t        | j                  d   j                        }n[t	        | j                  d         r'| j                  d   j
                  j                  d   }n| j                  d   j                  d   }|t        | j                        fS z*Return shape of the transformed DataFrame.r   )r   r   r[   rm   r   r=  rX   rA  	n_sampless     rT   rX   zPandasTransformed.shape|  s     a)DLLO334IQ(Q--33A6I Q--a0I#dll+++rV   )__name__
__module____qualname____doc__r   r   rM   r0  r   r   r   r@  propertyr
   r}   rX   __classcell__rF  s   @rT   r7  r7  a  sf    ;EeBJJ567E !,E 
	E0 ,uS#X , ,rV   r7  c                     |r/t        | j                        dkD  r|t        vrt        d| d      t	        |      \  }}t        | ||||      \  }}t        |       }t        ||      ||fS )Nr   zDataFrame for z cannot have multiple columnsr8  )r[   r   _matrix_metar\   r   r   r5  r7  )rI   r   ru   rv   r   r8  arrayss          rT   _transform_pandas_dfrV    s     DLL!A%$l*B>$/LMNN$6}$E!M>#6dM=2D$ M= #4(F&@ rV   r   r   c                    t        | d|      \  } }}t        | j                        dk(  r| j                  d   }n)t        j                  | j                        j
                  }t        ||      \  }}t        ||||       y )NF)r   r   r   )rV  r[   r   rM   stackTr   _meta_from_numpy)rI   r   ro   r   rp   r   s         rT   _meta_from_pandas_dfr[    sl     &dE=JD!Q
4<<AQ&((#E51LE5UD%0rV   c           
          t        | |||      \  }}}t        j                         }t        t	        j
                  |j                         t        |||      t        j                  |                   |||fS N)rt   rJ   rs   )	rV  ry   rz   r?   r;   XGDMatrixCreateFromColumnarr   rB   r~   )	rI   r   rJ   rt   ru   rv   rs   dfr   s	            rT   _from_pandas_dfr`    s{     (< -($B} __F(( / LL 	
 =-//rV   c                 "   t        | j                        r8| j                  j                         j	                  t
        j                        } nPt        | j                        rt        |       } n/| j                  t
        j                  t
        j                        } t        t        | d|             r| j                         } t        | j                        dk(  s&| j                  d   dk(  s| j                  d   dk(  sJ t        | |||       y)z6Help transform pandas series for meta data like labels)r&  ro   r   r   N)r   ro   rq   r2  astyperM   r   r   r  r  r'  r   r[   rX   rZ  )rI   r   ro   r   s       rT   _meta_from_pandas_seriesrc    s     $**%{{##%,,RZZ8		$d#}}RZZ"&&}9'$67}}tzz?a4::a=A#5A!9KKKT4/rV   c                 d   | j                   j                  t        vr"t        | j                         r|st	        |        |r+t        | j                         r| j
                  j                  } t        | j                  j                  | j                  d   d      j                  d      ||||      S )Nr   r   r|   rI   rJ   rt   ru   rv   )ro   r   r   r   r   r"  r=  r   rq   reshaperX   rb  )rI   rJ   rt   r   ru   rv   s         rT   _from_pandas_seriesrg    s     	

33

#(: &odjj9xx~~[[  A299'B## rV   c                   f     e Zd ZdZ	 d	deed      dee   ddf fdZe	de
eef   fd       Z xZS )
ArrowTransformedz,A storage class for transformed arrow table.Nr   zpa.NumericArrayzpa.DictionaryArrayr8  rK   c                      | _         g  _        t        rdd ln
t	               g dt
        d   dd f fd} j                   D ]
  } ||        t           |       y )Nr   r4  rj  rK   c                 r   t        | j                        r| j                  }| j                  }t        |j                  j
                  f      st        d      t        ||      \  }}}	j                  j                  |       j                  ||f       y t        |       }j                  |       y )Nz;Only string-based categorical index is supported for arrow.)rc   DictionaryArray
dictionaryrm   StringArrayLargeStringArray	TypeErrorr   r>  r   r   )
r4  catsr=  rB  rC  rD  jdatar;  r  rA  s
          rT   push_seriesz.ArrowTransformed.__init__.<locals>.push_series	  s    #r112~~!$9L9L(MN#U  '4D%&@#&&--c2ff-.(-U#rV   r:  )r   r>  r   r  r8   r   r?  r@  )rA  r   r8  rt  r4  r;  r  rF  s   `    @@rT   r@  zArrowTransformed.__init__  sr    
 .0 !B	$U#JK 	$PT 	$ << 	C	 	eDrV   c                 \    t        | j                  d         t        | j                        fS rH  )r[   r   rA  s    rT   rX   zArrowTransformed.shape  s%     4<<?#S%666rV   r   )rK  rL  rM  rN  r   r   r   r   r@  rO  r
   r}   rX   rP  rQ  s   @rT   ri  ri    sd    6
 04"EeCDE"E !,"E 
	"EH 7uS#X 7 7rV   ri  zpa.Tablec                    t         rdd l}n
t               }t        |       \  }}t	        |      \  }}||}||}g }|D ]  }	| j                  |	      }
|
j                         }t        ||j                        r |j                   |j                               }t        |      r|st        d        |j                  |        t        ||      }|||fS )Nr   rS  )r   r  r8   _arrow_feature_infor   columnr	  rc   BooleanArraycastr   r   r   r   ri  )rI   r   ru   rv   r  t_namest_typesr8  r   cnamecol0r4  df_ts                rT   _transform_arrow_tabler  #  s     *40GW$6}$E!M>G 	{{5!>B>Q>Q>Sc2??+((72779%C&8 %T*s	 GNCD--rV   	n_threadsc           
          t        | |||      \  }}}t        j                         }t        t	        j
                  |j                         t        |||      t        j                  |                   |||fS r]  )	r  ry   rz   r?   r;   r^  r   rB   r~   	rI   r   rJ   r  ru   rv   rs   r  r   s	            rT   _from_arrow_tabler  F  s|     *@ -*&D- __F((  "!7O LL 	
 =-//rV   c                     dd l }  | j                         d | j                         d | j                         d | j                         d | j
                         d | j                         d | j                         d | j                         d | j                         d | j                         d | j                         d | j                         di}|S )Nr   r}   r|   r   )r  r   r   r   r   r   r   r   r   r   r   r   bool_)r  mappings     rT   _arrow_dtyper  _  s     		5
E
E
E
E		U		U		U

g

g

g
CG NrV   c                     t         rdd ln
t               | j                  }dt        dt        ffd}t        t        ||            }||fS )Nr   r   rK   c                     j                  |       }t        |j                  j                        rt        S t               |j                     S r   )ry  rc   rR   r   r   r  )r   r4  r  tables     rT   map_typez%_arrow_feature_info.<locals>.map_type~  s;    ll4 chh 1 12L~chh''rV   )r   r  r8   column_namesrQ   r   r   )rI   namesr  r  r  r  s       @@rT   rx  rx  u  sQ    EE(s (s ( Xu%&E%<rV   c                 B    | }t        |j                         |||       y )N)r   ro   r   )r[  	to_pandas)rI   r   ro   r   r  s        rT   _meta_from_arrow_tabler    s     E*U6RrV   c                  .    t               st        d      y )Nz!`pyarrow` is required for polars.)r9   rd   r  rV   rT   _check_pyarrow_for_polarsr    s    !=>> "rV   c                     t        |       r+| j                         }t        j                  dt               n| }t                |j                         }t        ||||      S )Nz}Using the default parameters for the polars `LazyFrame.collect`. Consider passing a realized `DataFrame` or `Series` instead.)r4   collectrO   rP   rS   r  to_arrowr  )rI   r   ru   rv   r_  r  s         rT   _transform_polars_dfr    s[     D!\\^C	
 KKME!!=- rV   c           
          t        | |||      \  }}}t        j                         }t        t	        j
                  |j                         t        |||      t        j                  |                   |||fS r]  )	r  ry   rz   r?   r;   r^  r   rB   r~   r  s	            rT   _from_polars_dfr    s{     *> -*&D- __F((  "!7O LL 	
 =-//rV   c                      	 ddl m dt        dt        ffd} | S # t        $ r" 	 ddlm}  Y | S # t        $ r ddlm}  Y Y | S w xY ww xY w)Nr   r   ro   rK   c                     t        |       S r   r   r   s    rT   r   z4_lazy_load_cudf_is_cat.<locals>.is_categorical_dtype  s    e%566rV   r   )cudfr   r   r   rd   cudf.api.typesr   cudf.utils.dtypes)r   r   s    @rT   _lazy_load_cudf_is_catr    sa    
?)	7 	7 	7    ?	?;    	?>	??s#    	A0AAAAc                      ddl m}  | S )Nr   r   )r  r   r  s    rT   _lazy_load_cudf_is_boolr    s    ,rV   c                   f     e Zd ZdZdeedef      dee   ddf fdZ	e
deeef   fd       Z xZS )	CudfTransformedz/A storage class for transformed cuDF dataframe.r   r   r8  rK   Nc                      | _         g dt        dd f fd} j                   D ]
  } ||        t           |       y )Nr  rK   c                    t        |       rW| j                  | j                  }}t        ||      \  }}}j                  j                  |       j                  ||f       y t        |       }j                  |       y r   )r   r<  r=  r   r>  r   r   )	r  rr  r=  	cats_ainf
codes_ainfrD  ainfr;  rA  s	          rT   rt  z-CudfTransformed.__init__.<locals>.push_series  sk    #!nnciie-9$-F*	:s&&--c2i45 15T"rV   r:  )r   r   r?  r@  )rA  r   r8  rt  r4  r;  rF  s   `    @rT   r@  zCudfTransformed.__init__  sW    
  		#S 		#T 		# << 	C	 	eDrV   c                     t        | j                  d         r'| j                  d   j                  j                  d   }n| j                  d   j                  d   }|t	        | j                        fS rH  )r   r   r=  rX   r[   rI  s     rT   rX   zCudfTransformed.shape  s^     dll1o&Q--33A6IQ--a0I#dll+++rV   )rK  rL  rM  rN  r   r   r   r   r   r@  rO  r
   r}   rX   rP  rQ  s   @rT   r  r    sb    9EeJ567E !,E 
	E6 ,uS#X , ,rV   r  c                 z   t               }t               t        |       r? || j                        r| j	                  t
        j                        } | j                  g}nJ| j	                  | j                  d      D ci c]  }|t
        j                   c}      } | j                  }t        fd|D              st        |        |t        |       r| j                  g}nt        | j                  dd      rB| j                  D cg c]*  }dj                  |D cg c]  }t        |       c}      , }}}n(t!        | j                  j#                  t                    }t%        |      \  }}	|Kg }|D ]D  }
 |
      rr|j'                  t(               #|j'                  t*        |
j                            F g }t        |       rS | j                        rr|j'                  | j,                         nrt/        t0              |j'                  |        n{t3        | j                  | j                        D ]X  \  }}
| |   } |
      rr|j'                  |j,                         1 |
      rt/        t0              |j'                  |       Z t5        ||	      ||fS c c}w c c}w c c}}w )Nr   )includec              3   ^   K   | ]$  }|j                   t        v xs  |      xr  & y wr   )r   r   ).0ro   r   r   s     rT   	<genexpr>z%_transform_cudf_df.<locals>.<genexpr>   s?        	

** 	@ '>,>	@s   *-zcudf.core.multiindexr   r   rS  )r  r  r.   ro   rb  rM   r   select_dtypesr   allr   r   r:   r   r   rQ   r   r   r   r   r   r   r"  r\   r   r1  r  )rI   ru   rv   r   r   r   r4  r   r   r8  ro   r3  seriesr   s      `         @rT   _transform_cudf_dfr    sO    ,-M13D$;;rxx(D**{{&*&8&8&8&HIsS"((]I
    
 	!& !YYKMT\\+A<PDHLLQqSXXq&9!s1v&9:QMQ !1!1#!67M %7}$E!M> 	GE#E*/A$$U+$$%9%**%EF		G FD

+0BMM$((#_--MM$dllDKK8 	&JC#YF#E*/Afjj)%e, 11f%	& 	~> e J  ':Qs    J-J7 J22	J72J7c           	          t        | |||      \  }}}t        j                         }t        t	        j
                  |j                         t        ||      t        j                  |                   |||fS )N)rt   rJ   )	r  ry   rz   r?   r;   XGDMatrixCreateFromCudaColumnarr   rB   r~   )rI   rJ   rt   ru   rv   r   r_  r   s           rT   _from_cudf_dfr  U  st     (:m],>($B} __F,, 9LL 	
 =-//rV   c                     t        | d      S )N__cuda_array_interface__r   r]   s    rT   _is_cupy_aliker  l  s    4344rV   c                     dd l }t        | d      st        | d      r|j                  | d      } t        |       s| j                  |j
                  fv r| j                  |j                  d      } | S )Nr   r  	__array__F)r   )cupyrZ   r   r   ro   r  rb  r   )rI   r  s     rT   _transform_cupy_arrayr  p  s_    434{9Szz$Uz+t

tzzl :{{4<<e{4KrV   c           	      
   t        |       } t        |       }t        j                         }t	        t        j                  ||d      d      }t        t        j                  ||t        j                  |                   |||fS )z%Initialize DMatrix from cupy ndarray.)rJ   rt   zutf-8)r  r   ry   rz   bytesjsondumpsr?   r;   %XGDMatrixCreateFromCudaArrayInterfacer~   )rI   rJ   rt   ru   rv   interface_strr   configs           rT   _from_cupy_arrayr  z  ss     !&D(.M__F4::'gFGQF2266<<#7	

 =-//rV   c                 ~    	 dd l }t        | |j                  j                  j
                        S # t        $ r Y yw xY wNr   F)cupyxrd   rc   scipysparsera   rI   r  s     rT   _is_cupy_csrr    =     dEKK..99::     0 	<<c                 ~    	 dd l }t        | |j                  j                  j
                        S # t        $ r Y yw xY wr  )r  rd   rc   r  r  rl   r  s     rT   _is_cupy_cscr    r  r  c                 L    dt        t        |             v xr dt        |       v S )N	PyCapsuledltensor)rQ   rR   r]   s    rT   
_is_dlpackr    s#    #d4j/)EjCI.EErV   c                 @    ddl m} dt        |       vsJ  ||       } | S )Nr   )from_dlpackused_dltensor)r  r  rQ   )rI   r  s     rT   _transform_dlpackr    s&     #d)+++tDKrV   c                 6    t        |       } t        | ||||      S r   )r  r  re  s        rT   _from_dlpackr    s!     T"DD'7M=QQrV   c                 B    t        | t        t        j                  f      S r   )rc   rQ   osr(   r]   s    rT   _is_urir    s    dS"++.//rV   c                 R   t        | |       t        j                         }t        j                  t        j
                  j                  |             } t        t        |       t        |            }t        t        j                  |t        j                  |                   |||fS )N)urirs   )rU   ry   rz   r  fspathpath
expanduserrB   rQ   r}   r?   r;   XGDMatrixCreateFromURIr~   )rI   rJ   ru   rv   rs   r   r  s          rT   	_from_urir    sw     w'__F99RWW''-.DSYO8LMF++FFLL4HIJ=-//rV   c                 "    t        | t              S r   )rc   r   r]   s    rT   _is_listr    s    dD!!rV   c                 d    t        j                  |       }t        |        t        ||||||      S )NrI   rJ   rt   ru   rv   rs   )rM   r   r^   r   )rI   rJ   r  ru   rv   rs   r   s          rT   
_from_listr    s8     HHTNEd##' rV   c                 "    t        | t              S r   )rc   tupler]   s    rT   	_is_tupler    s    dE""rV   c                 $    t        | |||||      S )NrI   rJ   r  ru   rv   rs   )r  r  s         rT   _from_tupler    s#     ##' rV   c                 "    t        | t              S r   )rc   r<   r]   s    rT   _is_iterr    s    dH%%rV   c                     t        | d      S )Nr  r   r]   s    rT   _has_array_protocolr    s    4%%rV   c                     t        j                  dt        |        dt               	 dd l}	 |j                  j                  |       } | S # t
        $ r Y y w xY w# t        $ r Y y w xY w)NzUnknown data type: z$, trying to convert it to csr_matrixr   )	rO   rP   rR   rS   rb   rd   r  ra   	Exception)rI   r  s     rT   _convert_unknown_datar     sq    MM
d4j\)MN||&&t, K  
  s"   A A 	AA	A&%A&F)r   rs   threadsc           	      2   dt         t        t        t        f      dt        t         t              fd}t        |       s!t        |       st        |       st        |        t        |       r ||      sJ t        | |||||      S t        |       r ||      sJ t        | |||||      S t        |       r) ||      sJ t        | j                         |||||      S t        |       r ||      sJ t!        | |||||      S t#        |       r ||      sJ t%        | ||||      S t'        |       r ||      sJ t)        | |||||      S t+        |       r ||      sJ t-        | |||||      S t        |       r't/               }|j1                  | j2                  | i      } t5        |       rt7        | ||||||      S t9        |       rt;        | ||||||      S t=        |       r| j>                  } t        |       rtA               }	|	j1                  |       } tC        |       rtE        | ||||||      S tG        |       st        |       rtI        | |||||      S tK        |       r ||      sJ tM        | ||||      S tO        |       rtQ        d	      tS        |       rtQ        d
      tU        |       r ||      sJ tW        | ||||      S tY        |       rtA               }	|	j1                  |       } t[        |       rtE        | |||||      S t]        |       r/ ||      sJ t_        j`                  |       }
t!        |
||||      S tc        |       }| ||      sJ t        |||||      S tQ        dte        tg        |             z         )zDispatch data for DMatrix.rv   rK   c                 :    t        | t              rt        d      y)Nz9Reference category is only supported by DataFrame inputs.T)rc   r   r\   )rv   s    rT   
check_catsz)dispatch_data_backend.<locals>.check_cats  s#     mZ0K  rV   r  r  )rJ   r  ru   rv   rs   )rI   r   rJ   rt   ru   rv   rs   )rI   rJ   rt   ru   rv   r   zcupyx CSR is not supported yet.zcupyx CSC is not supported yet.)rI   r   rJ   rt   ru   rv   re  zNot supported type for data.)4r   r   r$   r   r   r.   r2   r5   r^   rg   r   r   r   r   tocsrr   r   r  r  r  r  r  r  r7   rC   r   r3   r  r+   r  r-   _fsproxy_fastr6   r1   r`  r,   r  r  r  r  rq  r  r  r  r0   r/   r  rM   r   r  rQ   rR   )rI   rJ   r  ru   rv   r   rs   r  plr   r   	converteds               rT   dispatch_data_backendr     s(   lJ&> ?@	8L)	* !$'!$'$D-(((''+
 	
 D-(((''+
 	
 D-(((''+
 	
 -((( ''+
 	
 t}-(((w}oVV~-(((''+
 	
 -(((''+
 	
 _||TYY-.$''+
 	
  ''+
 	
 t!!_||D!T1''+
 	
 4L.''1
 	
 d-(((gw}UUD9::D9::$-(((D'7M=QQ_||D!D1''
 	
 4 -(((

4  ''
 	
 &d+I-(((''
 	
 2Sd_D
EErV   c                 |   t        | d      rd| j                   d| }|t        v r$t        | j                        dkD  rt	        |      y t        | j                        dkD  s<t        | j                        dk(  rA| j                  d   dk7  r.| j                  d   dk7  rt	        d| j                   d|       y y y y )NrX   zInvalid shape: z for rY   r   r   )rZ   rX   rT  r[   r\   )rI   r   r   s      rT   _validate_meta_shaper    s    tW

|57<4::" o%tzz?Q

Oq djjmq&8TZZ]a=Otzzl%vFGG >P&8  rV   fieldc                     t        | |      \  } }| j                  }|j                  dd       t        d      t	        |       }t        t        j                  |t        |      |             y )NmaskzMasked array is not supported.)	r   r   getr\   r   r?   r;   XGDMatrixSetInfoFromInterfacerA   )rI   r  ro   r   	interfacer  s         rT   rZ  rZ    sa     #4/KD%((I}}VT".9::#D)M2265<WXrV   c                 J    t        j                  |       }t        ||||       y r   )rM   r   rZ  )rI   r  ro   r   data_nps        rT   _meta_from_listr    s     hhtnGWeUF3rV   c                     t        | |||      S r   )r  )rI   r  ro   r   s       rT   _meta_from_tupler    s     4v66rV   c                     |t         vrt        | j                  d d df   ||       y | j                  } t	        |       }t        t        j                  |t        |      |             y Nr   )	rT  _meta_from_cudf_seriesilocrq   r   r?   r;   r  rA   )rI   r  r   r  s       rT   _meta_from_cudf_dfr    sP    L tyyAv>{{(.	D66vuU|YWXrV   c                     t        | |       t        |       }t        t        j                  |t        |      |             y r   )r   r   r?   r;   r  rA   rI   r  r   rE  s       rT   r  r     s1    D% 
t
$C2265<MNrV   c                     t        |       } t        |       }t        t        j                  |t        |      |             y r   )r  r   r?   r;   r  rA   r  s       rT   _meta_from_cupy_arrayr    s1     &D
t
$C2265<MNrV   matrixc                    | j                   }|J t        ||       |yt        |      rt        ||||       yt	        |      rt        ||||       yt        |      rt        ||||       yt        |      rt        ||||       yt        |      r|j                  }t        |      rBt        |      r|j                         }t                t        |j!                         |||       yt#        |      rt%        ||||       yt'        |      rt)        ||||       yt+        |      rt-        |      }t/        |||       yt1        |      rt3        |||       yt5        |      rt7        |||       yt9        |      rt/        |||       yt;        |      rt%        ||||       yt=        |      rh|j>                  jA                  d      }tC        |jD                        dk(  s&|jD                  d   dk(  s|jD                  d   dk(  sJ t        ||||       ytG        |      r$tI        jJ                  |      }t        ||||       ytM        d|z   tO        tQ        |                  )zDispatch for meta info.N)ro   r   r|   r   r   zUnsupported type for ))r   r  r  r  r  r  r   rZ  r+   r  r-   r  r3   r4   r  r  r  r1   r[  r2   rc  r  r  r  r.   r  r,   r  r  r/   r0   rq   rb  r[   rX   r  rM   r   rq  rQ   rR   )r  rI   r   ro   r   r   s         rT   dispatch_meta_backendr    s+    ]]Ft$|~dE62tUF3tUF3tT5&9t!!$%<<>D!#t}}eVDTT4uVD tUF;$ &dD&1DtT6244v.ddD&1DT4uVD{{!!'*4::!#tzz!}'9TZZ]a=OOOtUF34 

4 eV4
+d2CT
O
DDrV   c                   D     e Zd ZdZdeddf fdZdedefdZd	dZ	 xZ
S )
SingleBatchInternalIterzAn iterator for single batch data to help creating device DMatrix.
    Transforming input directly to histogram with normal single batch data API
    can not access weight for sketching.  So this iterator acts as a staging
    area for meta info.

    kwargsrK   Nc                 B    || _         d| _        t        |   d       y )Nr   F)release_data)r  itr?  r@  )rA  r  rF  s     rT   r@  z SingleBatchInternalIter.__init__T  s#     	e,rV   
input_datac                 r    | j                   dk(  ry| xj                   dz  c_          |di | j                   y)Nr   FTr  )r  r  )rA  r   s     rT   nextzSingleBatchInternalIter.next\  s/    77a<1!T[[!rV   c                     d| _         y r  )r  rv  s    rT   resetzSingleBatchInternalIter.resetc  s	    rV   rK   N)rK  rL  rM  rN  r   r@  r   r   r"  r$  rP  rQ  s   @rT   r  r  L  s3    - - -x D rV   r  c                    t        |       r| j                  } t        |       st        |       rt	        | |||      S t        |       rt        |       } | ||fS t        |       rt        |       ||fS t        |       st        |       rt        j                  |       } t        |       rt        | | j                        \  } }| ||fS t!        |       rt#        | d      } | ||fS t%        |       rt#        | j'                         d      } | ||fS t)        |       rt#        | j'                         d      } | ||fS t+        |       rt-        | |||      \  }}}|||fS t/        |       rt1               }|j3                  |       } t5        |       rt7        | |||      \  }}}|||fS t9        |       rt;        | |||      \  }}}|||fS t=        dt?        tA        |             z         )NT.Value type is not supported for data iterator:)!r-   r  r,   r.   r  r  r  r  r  r  r  rM   r   r   r   ro   rg   rr   r   r  r   r3   r  r2   r6   rC   r+   r  r1   rV  rq  rQ   rR   )	rI   ru   rv   r   rp   df_plr   df_par_  s	            rT   _proxy_transformr*  g  s    t!!4L.!-0B
 	
 d$T*]M11$ &}DD~4xx~"44a]M11D%dD1]M11D%djjlD9]M11D%djjlD9]M11$.B$m]/
+}m m]22_||D!.D$m]/
+}m m]22T+?$m],
(M= =-//
Ds4PT:V
WWrV   c                 ^     t         fdt        t        t        t        t
        fD              S )z0Whether the data is a CUDA-based data structure.c              3   .   K   | ]  } |        y wr   r  )r  prI   s     rT   r  zis_on_cuda.<locals>.<genexpr>  s      	 	
$	s   )anyr,   r.   r-   r  r  r]   s   `rT   
is_on_cudar/    s0     	 
	 	 	rV   proxyc                 F   t        |      s!t        |      st        |      st        |       t	        |t
              r| j                  |       yt        |      r| j                  |       yt        |      rt        |      }| j                  |       yt	        |t        t        f      r| j                  |       yt        |      rt        |       | j                  |       yt!        |      r| j#                  |       yt%        dt'        t)        |            z         }|)zDispatch for QuantileDMatrix.Nr'  )r.   r2   r5   r^   rc   r  _ref_data_from_cuda_columnarr  _ref_data_from_cuda_interfacer  r  ri  r7  _ref_data_from_columnarr   _ref_data_from_arrayrg   _ref_data_from_csrrq  rQ   rR   )r0  rI   r   s      rT   dispatch_proxy_set_datar7    s     !$'!$'$$(**40d++D1$ &++D1$)+<=>%%d+$""4(D  &
Ds4PT:V
WC
IrV   )NNNr%  r   )rN  ry   	functoolsr  r  rO   typingr   r   r   r   r   r   r	   r
   r   r   r   numpyrM   _data_utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    _typingr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   compatr+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   corer;   r<   r=   r>   r?   r@   rA   rB   r  r  r   rC   r   rD   r   rz   rE   __annotations__r   rT  rU   r^   r   rg   rr   ROWr}   r   r   r   r   r0  r   r   r   r   r   pandas_pyarrow_mapperupdater   r   rQ   r   r   r   r   cacher   r   r  r   r  r  r  r  r5  r7  rV  r[  r`  rc  rg  ri  r  r  r  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r   r  rZ  r  r  r  r  r  r  r  r*  r/  r7  r  rV   rT   <module>rD     sr   $    	         (      $	 	 	 /) .3
OOXl+Xl-CC.   	 w'
x 
(?2K 
PT 
UH U U
!x !D !& 4 H @ &3%6%60
0 0 	0
 L)0 L)0 #0 %0<!x !D !4 &3%6%60
0 0 	0
 L)0 L)0 #0 %0:!x !D !&0H 02::)> 0
( 
8J+? 
BJJ 
( &3%6%60
**0 0 	0
 L)0 L)0 #0 %08  "        2 3   1 22 8  $'(
'(
3-'( L)'( L)	'(
 '( 8L!8L#99:'(TC[ CT C"+3 +4 +
s t   h}d':;    "; 4  ;-*=!>  $k d  

 > OD O O &e & &C
C	%

M)
*+CL', ',Z -1?C
 L) E,
":;<	
 3- h|4h|6LLM.1
1
1 J1 OO	1
 
10 &3%6%60
0 0 	0
 0 L)0 E,
":;<0 #0 %060
00&.z&:0DJOO0	0"
  	
  L) L) %0*7} *7Z .
 . . L) . E,
":;<	 .
 Xl3Xl5KKL .T &3%6%60
00 0 	0
 L)0 E,
":;<0 #0 %02 d8S=)  *h 5cD+A (S
S
S JS OO	S
 
S?

 L) E,
":;<	
 Xl3Xl5KKL< &3%6%60
00 0 	0
 L)0 E,
":;<0 #0 %02  # 5      3%+!6  %,m %,PJ
JL)J E,
":;<J 	J
 \\JZ0
0 0 	0
 L)0 E,
":;<0 0 %0.5 5d 5 U 0
00 0 L)	0
 L)0 %0(;x ;D ;;x ;D ;FX F$ FH  R
RR R L)	R
 L)R %R0( 0y2 0 &3%6%60
0o&0 L)0 L)	0
 #0 %0"8 "	$ " &3%6%6
  	
 L) L) # %*#H #5!1 # &3%6%6
  	
 L) L) # %&&8 &	( 3 &&h &4 & X 2  %%2%6%6yF
yF yF 	yF
 L)yF E,
":;<yF yF #yF %yFxHx Hs Ht HY
**YY JY OO	Y
 
Y4
44'/
';4EK__4	47
77'/
';7EK__7	7YX Yc Y6?? Yt YO O# Ov OSW OO O Ofoo ORV O OS=E=E#=E+.=E7?
7K=E	=E@h 62X
2XL)2X L)2X 	2X
 2XjS T $$
$ 
$rV   