
    bi                        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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 ddl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* ddl)m+Z, dd	l)m-Z-m.Z.m/Z/m0Z0 dd
l1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: erddl;Z<eejz                  ee!   ee"   f   Z>dZ?ddhZ@de dee#   ddfdZAde ddfdZBde deCfdZDde deCde fdZEe4j                  dde de#deGdee!   dee"   de4de>fdZHde deCfdZIe4j                  dde de#deGdee!   dee"   de4de>fdZJde deCfdZKde deej                     fdZMde d ee$   deej                  ee$   f   fd!ZNde d ee$   dej                  fd"ZOe4j                  ddej                  de#deGdee!   dee"   de4de>fd#ZPde dee*   fd$ZQde deCfd%ZRd&d&d&d&d&d&d&d&d'd'd'd(d)ZSd&d&d&d&d&d&d&d&d'd'd(d*ZTd&d&d&d&d&d&d&d&d'd'd'd'd(d+ZUeSj                  eT       eSj                  eU       d,ZWde ddfd-ZXde*d.eeY   dee!   dee"   d/eCdeee!   ee"   f   fd0ZZd e%deCfd1Z[d edeCfd2Z\d edeCfd3Z]ej                  de	e%geCf   fd4       Z_d e%deCfd5Z`ej                  de	e%geCf   fd6       Zad e%deCfd7Zbd8edej                  fd9Zcej                  deCfd:       Zdej                  deefd;       Zfde*deej                     fd<Zg G d= d>e      Zh	 	 	 dde*d/eCdee!   dee"   d.eeY   deehee!   ee"   f   fd?Zide d@eYd ee$   dAejz                  ddf
dBZje4j                  dde*d/eCde#deGdee!   dee"   de4de>fdCZkde deCfdDZlde d@eYd ee$   dAejz                  ddf
dEZmde deCfdFZnde de#deGd/eCdee!   dee"   de>fdGZoej                  de
eeej                     f   fdH       Zq G dI dJe      Zrde deCfdKZsddLdMeCdee!   dee"   deeree!   ee"   f   f
dNZte4j                  fde d/eCde#dOeGdee!   dee"   de4de>fdPZuej                  de
e eYf   fdQ       Zvde deeeY   ef   fdRZwde d@eYd ee$   dAejz                  ddf
dSZxde deCfdTZyde deCfdUZzde deCfdVZ{ddWZ|de d/eCdee!   dee"   deeree!   ee"   f   f
dXZ}e4j                  fde d/eCde#dOeGdee!   dee"   de4de>fdYZ~de deCfdZZde deCfd[Zej                  de	egeCf   fd\       Zde d]edefd^Zde dee!   dee"   d/eCdeejz                  eee!   ee"   f   f
d_Zde de#deGdee!   dee"   d/eCde>fd`Zde deCfdaZde deCfdbZde defdcZde de#deGdee!   dee"   de>fddZde deCfdeZde deCfdfZde deCfdgZde deCfdhZde de#deGdee!   dee"   de>fdiZde dee&   fdjZe4j                  fde&dee#   dee!   dee"   de4de>fdkZde dee   fdlZe4j                  ddede#dOeGdee!   dee"   de4de>fdmZde deee   fdnZe4j                  ddede#dOeGdee!   dee"   de4de>fdoZde dee3   fdpZde deCfdqZde de fdrZdse4j                  dtde de#dueGdee!   dee"   d/eCde4de>fdvZde d@eYddfdwZdej                  dxeYd ee$   dAejz                  ddf
dyZdedxeYd ee$   dAejz                  ddf
dzZdedxeYd ee$   dAejz                  ddf
d{Zde dxeYdAejz                  ddfd|Zde dxeYdAejz                  ddfd}Zde dxeYdAejz                  ddfd~Z	 dde5de d@eYd ee$   ddf
dZ G d de3      Zde dee!   dee"   d/eCde'f
dZdedeCfdZde7de d]ee   ddfdZy)zData dispatching for DMatrix.    N)TYPE_CHECKINGAnyCallableDictListOptionalSequenceTupleType	TypeGuardUnioncast   )ArrayInfTransformedDfarray_hasobjectarray_interfacearray_interface_dictcheck_cudf_metacuda_array_interfacemake_array_interface)
CupyTDataTypeFeatureNamesFeatureTypesFloatCompatible
NumpyDTypePandasDTypePathLikeTransformedDatac_bst_ulong)	DataFrame)Series)import_polarsimport_pyarrowis_pyarrow_availablelazy_isinstance)	_LIBDataIterDataSplitModeDMatrix_check_call_ProxyDMatrixc_strfrom_pystr_to_cstrmake_jcargs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)r4   r5   s     G/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/xgboost/data.py_warn_unused_missingr@   L   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lenrC   
ValueErrorr4   s    r?   _check_data_shaperI   T   s/    tW#djj/Q"6STT #7rA   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.sparserK   
isinstanceImportErrorrL   )r4   is_array	is_matrixrK   rL   s        r?   is_scipy_csrrR   Y   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_matrixrL   zlength mismatch: z vs )rC   )rM   rW   rL   rF   indicesr4   rG   _ensure_np_dtypeindptrdtyperC   )r4   rU   rW   rL   rZ   _rX   valuess           r?   transform_scipy_sparser^   l   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KrA   )data_split_modenthreadfeature_namesfeature_typesr_   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   r5   r`   r_   )ctypesc_void_pr^   r,   r(   XGDMatrixCreateFromCSRr   rZ   rX   r4   r!   rC   r0   floatintbyrefr4   r5   r`   ra   rb   r_   handles          r?   _from_scipy_csrrm      s     __F!$-D##DKK(DLL)DII&

1&gG #O 4
 LL 	
 =-//rA   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)rW   )rM   ro   rN   rO   rW   )r4   rP   rQ   ro   rW   s        r?   is_scipy_cscrp      rS   rT   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   rd   )re   rf   r^   r,   r(   XGDMatrixCreateFromCSCr   rZ   rX   r4   r!   rC   r0   rh   ri   rj   rk   s          r?   _from_scipy_cscrs      s     __F4'##DKK(DLL)DII&

1&gG #O 4
 LL 	
 =-//rA   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)rM   ru   rN   rO   rv   )r4   rP   rQ   ru   rv   s        r?   is_scipy_coorw      rS   rT   c                     t        | d      S )N__array_interface__rE   rH   s    r?   _is_np_array_liker{      s    4.//rA   r[   c                    t        |       s,| j                  t        j                  t        j                  fv r#t        j
                  }| j                  |d      } | j                  j                  st        j                  | d      } | |fS )NFcopyA)requirements)
r   r[   r8   float16bool_float32astypeflagsalignedrequirer4   r[   s     r?   rY   rY      sf     t

rzz288.D D

{{5u{-::zz$S1;rA   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)r~   r[   r[   )r   c_contiguousr8   arrayasarrayAttributeErrorrY   r   s     r?   _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.rd   )rI   rY   r[   re   rf   r,   r(   XGDMatrixCreateFromDenser   r0   rh   ri   rj   )r4   r5   r`   ra   rb   r_   r\   rl   s           r?   _from_numpy_arrayr     s     dtTZZ0GD!__F%%D!gG #O 4
 LL 	

 =-//rA   c                 V    	 dd l }t        | |j                        S # t        $ r Y yw xY wNr   F)pandasrO   rN   r"   r4   pds     r?   _is_pandas_dfr     s1     dBLL))      	((c                 Z    	 dd l m} t        | |j                        S # t        $ r Y yw xY wr   )modin.pandasr   rO   rN   r"   r   s     r?   _is_modin_dfr   %  s1    ! dBLL))      	**ri   rh   i)int8int16int32int64uint8uint16uint32uint64r   r   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. )	rE   r   	enumeratename_pandas_dtype_mappercolumnsjoin_ENABLE_CAT_ERRrG   )r4   r   r[   
bad_fieldserrtype_errmsgs          r?   _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 metaenable_categoricalc                    ddl }||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   Nr   Tz3Sparse arrays from pandas are converted into dense.F)r   rN   r   
MultiIndexr   r<   listmapr   is_pd_sparse_dtypeappendr   subtyper   r:   r;   is_pd_cat_dtypeis_pa_ext_categorical_dtypeCAT_TKeyErrorr   )r4   r   ra   rb   r   r   r   xnew_feature_typesneed_sparse_extension_warnr[   s              r?   pandas_feature_infor   w  sE     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 E76E7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   rN   pandas.api.typesr   r   r   r   pandas_nullable_mapperr   )r[   r   r   r   r   is_intis_boolis_floats           r?   is_nullable_dtyper     s~     5e^,PPe$M7M)MFE">uzzY'>Ge$M7M)MHBWBBOE,BBrA   c                     t        | d      S )z;Return whether dtype is a pyarrow extension type for pandaspyarrow_dtyperz   r   s    r?   is_pa_ext_dtyper     s    5/**rA   c                 2    t        t        | dd      dd      S )z)Check whether dtype is a dictionary type.r   Npyarrow.libDictionaryType)r'   getattrr   s    r?   r   r     s     -}>N rA   c                  2   dd l } 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   versionVersion2.1.0CategoricalDtyper[   r6   c                     t        |       S NrN   r[   r   s    r?   pd_is_cat_210z+_lazy_load_pd_is_cat.<locals>.pd_is_cat_210  s    !%)9::rA   is_categorical_dtype)r   rE   utilr   r   __version__r   r   r   r   r   )r   r   r   r   r   s       @r?   _lazy_load_pd_is_catr     su    rww	"wrww	'J''//))2>>"gg&66/;[ ;T ; ! 5rA   c                 &    t               } ||       S )z)Wrapper for testing pandas category type.)r   )r[   is_cats     r?   r   r     s    !#F%=rA   c                  2   dd l } 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   )SparseDtyper[   r6   c                     t        |       S r   r   )r[   r   s    r?   pd_is_sparse_210z1_lazy_load_pd_is_sparse.<locals>.pd_is_sparse_210  s    !%55rA   )	is_sparse)r   rE   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   s       @r?   _lazy_load_pd_is_sparser     su    rww	"wrww	'J''//))2>>"gg&66*6 6 6 $#*rA   c                 &    t               } ||       S )z'Wrapper for testing pandas sparse type.)r   )r[   r   s     r?   r   r     s    ')IUrA   serc                 V   ddl }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)r   r   pyarrowr%   r   __arrow_array__combine_chunks
null_counttypes
is_booleanr=   to_numpyrY   r[   )	r  r   pad_arrayaachunk	zero_copyarrr\   s	            r?   pandas_pa_typer    s    
 .1YYG $335B))+E  A%Mbhh.A.A%**.M*MI nnInNCc399-FCJrA   c                      t         j                  j                  t         j                        t         j                  j                  d      kD  S )Nz1.25.0)r8   libNumpyVersionr    rA   r?   _lazy_has_npdtypesr    s/    66r~~.1D1DX1NNNrA   c                      ddl m} m} | |fS )Nr   Float32DtypeFloat64Dtype)r   r  r  r  s     r?   _lazy_load_pd_floatsr    s    1%%rA   c                 H  	
 t               \  	g }t               dt        dt        j                  fd}dt        dt        j                  f	
fd}dt        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  r6   c                    t        | j                  j                  j                  t        j
                        j                  dt        j                        j                  t        j                        t        j
                        d   S )Ng      na_valuer   )	rY   catcodesr   r8   r   replacenanr  )r  s    r?   	cat_codesz(pandas_transform_data.<locals>.cat_codes"  sZ    GGMM  ,WT266"XrvvX&JJ	

  	rA   c                     t              rt        j                  }n-t              rt        j                  }nt        j                  }t	        | j                  |t        j                        |      d   S N)r[   r   r   )rN   r8   r   r   rY   r  r$  )r  	res_dtyper  r  r[   s     r?   nu_typez&pandas_transform_data.<locals>.nu_type*  s]    e\*$&JJI|,

I

ILLy266L:I

 	rA   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'  )rN   r[   r8   r   Float32DTypeFloat64DTyper   r   r  r$  rY   )r  npdtypesr   r[   	np_dtypess      r?   oth_typez'pandas_transform_data.<locals>.oth_type6  s     
II 		&&		&&	"
 uRZZ 88LLNE LLrzzBFFLCEu{{3A66rA   zFpyarrow dictionary type is not supported. Use pandas category instead.)r  r  PdSeriesr8   ndarrayzipr   r   r   rG   r   r   r   r  r   r   r]   to_denser{   rY   r[   )r4   resultr%  r)  r/  colr  r\   r  r  r[   r.  s           @@@@r?   pandas_transform_datar6    s]   !5!7L,!F"$Ix BJJ 
X 
"** 
7h 72:: 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-.%/. MrA   c                   f    e Zd ZdZdeej                     ddfdZdefdZ	e
deeef   fd       Zy)PandasTransformedz1A storage class for transformed pandas DataFrame.r   r6   Nc                     || _         y r   r   selfr   s     r?   __init__zPandasTransformed.__init__g  s	    rA   c                     t        t        t        | j                              }t	        t        j                  |      d      }|S )6Return a byte string for JSON encoded array interface.utf-8)r   r   r   r   bytesjsondumps)r<  aitfssarrayss      r?   r   z!PandasTransformed.array_interfacej  s2    S-t||<=

5)73rA   c                 d    | j                   d   j                  d   t        | j                         fS z*Return shape of the transformed DataFrame.r   )r   rC   rF   r<  s    r?   rC   zPandasTransformed.shapep  s+     ||A$$Q'T\\):::rA   )__name__
__module____qualname____doc__r   r8   r1  r=  rA  r   propertyr
   ri   rC   r  rA   r?   r8  r8  d  sP    ;RZZ 0 T   ;uS#X ; ;rA   r8  c                     |r/t        | j                        dkD  r|t        vrt        d| d      t	        | ||||      \  }}t        |       }t        |      ||fS )Nr   zDataFrame for z cannot have multiple columns)rF   r   _matrix_metarG   r   r6  r8  )r4   r   ra   rb   r   arrayss         r?   _transform_pandas_dfrQ  v  sl     DLL!A%$l*B>$/LMNN#6dM=2D$ M= #4(FV$m]BBrA   r   rl   c                    t        | d|      \  } }}t        | j                        dk(  r| j                  d   }n)t        j                  | j                        j
                  }t        ||      \  }}t        ||||       y )NF)r   r   r   )rQ  rF   r   r8   stackTrY   _meta_from_numpy)r4   r   r[   rl   r\   r   s         r?   _meta_from_pandas_dfrV    sl     &dE=JD!Q
4<<AQ&((#E51LE5UD%0rA   c           
          t        | |||      \  }}}t        j                         }t        t	        j
                  |j                         t        |||      t        j                  |                   |||fS N)r`   r5   r_   )	rQ  re   rf   r,   r(   XGDMatrixCreateFromColumnarr   r0   rj   )	r4   r   r5   r`   ra   rb   r_   dfrl   s	            r?   _from_pandas_dfr[    s{     (< -($B} __F(( / LL 	
 =-//rA   c                 V    	 dd l }t        | |j                        S # t        $ r Y yw xY wr   )r   rO   rN   r#   r   s     r?   _is_pandas_seriesr]    s1     dBII&&  r   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 labelsr  r[   r   r   N)r   r[   r]   r3  r   r8   r   r   r  r  r$  r   rF   rC   rU  )r4   r   r[   rl   s       r?   _meta_from_pandas_seriesr_    s     $**%{{##%,,RZZ8		$d#}}RZZ"&&}9'$67}}tzz?a4::a=A#5A!9KKKT4/rA   c                 Z    	 dd l m} t        | |j                        S # t        $ r Y yw xY wr   )r   r   rO   rN   r#   r   s     r?   _is_modin_seriesra    s1    ! dBII&&  r   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   rh   r4   r5   r`   ra   rb   )r[   r   r   r   r   r!  r"  r   r]   reshaperC   r   r4   r5   r`   r   ra   rb   s         r?   _from_pandas_seriesrf    s     	

33

#(: &odjj9xx~~[[  A299'B## rA   c                     dd l }  | j                         t        j                   | j                         t        j                   | j                         t        j                   | j
                         t        j
                   | j                         t        j                   | j                         t        j                   | j                         t        j                   | j                         t        j                   | j                         t        j                   | j                         t        j                   | j                         t        j                  i}|S Nr   )r  r   r8   r   r   r   r   r   r   r   r   r   r   r  mappings     r?   _arrow_npdtyperk    s     		277
BHH
BHH
BHH
BHH		RYY		RYY		RYY

bjj

bjj

bjj+G NrA   c                   X    e Zd ZdZdeed      ddfdZdefdZe	de
eef   fd       Zy)	ArrowTransformedz,A storage class for transformed arrow table.r   zpa.NumericArrayzpa.DictionaryArrayr6   Nc                     || _         y r   r:  r;  s     r?   r=  zArrowTransformed.__init__  s     rA   c                     t         rddln
t               dt        d   dt        ffd}t        t        || j                              }t        t        j                  |      d      }|S )r?  r   Nr5  rn  r6   c                    | j                         }t        | j                        r| j                         \  }}}n|\  }}|j                  sJ | j                  dk(  sJ t        |j                  t        |       ft               | j                     |j                         }|5|j                  dfddd t        |       fd d}|j                  sd|d<   ||d	<   |S )
Nr   )rC   r[   is_cudaTz<t1   )r4   typestrr   stridesrC   maskrD   streamrv  )
buffersrN   DictionaryArrayis_cpuoffsetr   addressrF   rk  r=   )r5  rx  rv  r\   r4   jdatajmaskr  s          r?   	array_infz3ArrowTransformed.array_interface.<locals>.array_inf  s    kkmG#r112 #a$
d;;;::?"?(3xk$&sxx0 KK	E !\\40$ #!#h[ # {{&'E(O %fLrA   r@  )r   r  r%   r   r   r   r   r   rA  rB  rC  )r<  r  rP  rE  r  s       @r?   r   z ArrowTransformed.array_interface	  s[     !B	5!HI 	h 	< c)T\\23

6*G4rA   c                 \    t        | j                  d         t        | j                        fS rG  )rF   r   rH  s    r?   rC   zArrowTransformed.shape2  s%     4<<?#S%666rA   )rI  rJ  rK  rL  r   r   r=  rA  r   rM  r
   ri   rC   r  rA   r?   rm  rm    sU    6E"IJK	
' 'R 7uS#X 7 7rA   rm  c                     t        | dd      S )Nr   Tabler'   rH   s    r?   	_is_arrowr  8  s    488rA   zpa.Tabler\   c                 Z   t         rdd l}n
t               }t        |       \  }}||}||}g }|D ]j  }| j	                  |      }	|	j                         }
t        |
|j                        r |
j                   |j                               }
|j                  |
       l t        |      }|||fS rh  )r   r  r%   _arrow_feature_infocolumnr  rN   BooleanArrayr   r   r   rm  )r4   r\   ra   rb   r  t_namest_typesr   cnamecol0r5  df_ts               r?   _transform_arrow_tabler  <  s     *40GWG {{5!>B>Q>Q>Sc2??+((72779%Cs G$D--rA   	n_threadsc           
          t        | |||      \  }}}t        j                         }t        t	        j
                  |j                         t        |||      t        j                  |                   |||fS rX  )	r  re   rf   r,   r(   rY  r   r0   rj   	r4   r   r5   r  ra   rb   r_   r  rl   s	            r?   _from_arrow_tabler  Z  s|     *@ -*&D- __F((  "!7O LL 	
 =-//rA   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   ri   rh   r   )r  r   r   r   r   r   r   r   r   r   r   r   r   ri  s     r?   _arrow_dtyper  s  s     		5
E
E
E
E		U		U		U

g

g

g
CG NrA   c                     t         rdd ln
t               | j                  }dt        dt        ffd}t        t        ||            }||fS )Nr   r   r6   c                     j                  |       }t        |j                  j                        rt	        d      t               |j                     S )NzJCategorical feature is not yet supported with the current input data type.)r  rN   r=   r   NotImplementedErrorr   r  )r   r5  r  tables     r?   map_typez%_arrow_feature_info.<locals>.map_type  sJ    ll4 chh 1 12%  ~chh''rA   )r   r  r%   column_namesr<   r   r   )r4   namesr  r	  r  r  s       @@r?   r  r    sQ    EE	(s 	(s 	( Xu%&E%<rA   c                 B    | }t        |j                         |||       y )N)r   r[   rl   )rV  	to_pandas)r4   r   r[   rl   r  s        r?   _meta_from_arrow_tabler    s     E*U6RrA   c                     t        | dd      S )Nzpolars.lazyframe.frame	LazyFramer  rH   s    r?   _is_polars_lazyframer    s    4!9;GGrA   c                     t        | dd      S )Nzpolars.series.seriesr#   r  rH   s    r?   _is_polars_seriesr    s    4!7BBrA   c                 >    t        |       }t        | dd      }|xs |S )Nzpolars.dataframe.framer"   )r  r'   )r4   lfrZ  s      r?   
_is_polarsr    s$    	d	#B	7	EB8OrA   c                  .    t               st        d      y )Nz!`pyarrow` is required for polars.)r&   rO   r  rA   r?   _check_pyarrow_for_polarsr    s    !=>> "rA   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.)r  collectr:   r;   r>   r  to_arrowr  )r4   r   ra   rb   rZ  r  s         r?   _transform_polars_dfr    s[     D!\\^C	
 KKME!!=- rA   c           
          t        | |||      \  }}}t        j                         }t        t	        j
                  |j                         t        |||      t        j                  |                   |||fS rX  )	r  re   rf   r,   r(   rY  r   r0   rj   r  s	            r?   _from_polars_dfr    s{     *> -*&D- __F((  "!7O LL 	
 =-//rA   c                     t        | dd      S )Nzcudf.core.dataframer"   r  rH   s    r?   _is_cudf_dfr    s    4!6DDrA   c                 j    t        | dd      xs t        | dd      xr t        t        |       dd      S )z+Must go before both pandas and cudf checks.zpandas.core.framer"   zpandas.core.seriesr#   zcudf.pandas.fast_slow_proxy_FastSlowProxyMeta)r'   r=   rH   s    r?   _is_cudf_pandasr    sE     	1;? 	A4!5x@ T
13GrA   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   r[   r6   c                     t        |       S r   r   r   s    r?   r   z4_lazy_load_cudf_is_cat.<locals>.is_categorical_dtype  s    e%566rA   r   )cudfr   r   r   rO   cudf.api.typesr   cudf.utils.dtypes)r   r   s    @r?   _lazy_load_cudf_is_catr    sa    
?)	7 	7 	7    ?	?;    	?>	??s#    	A0AAAAr%  c                   	 t               }g 	dt        ddf	fd}t        |       r7 || j                        r|d   j                  }n| j                  } ||       nQt        |       D ]C  \  }} || |   j                        r||   }|j                  }n| |   j                  } ||       E t        t        j                  	            }|S )a#  Extract CuDF __cuda_array_interface__.  This is special as it returns a new list
    of data and a list of array interfaces.  The data is list of categorical codes that
    caller can safely ignore, but have to keep their reference alive until usage of
    array interface is finished.

    	interfacer6   Nc                 T    d| v r| d   j                   | d<   j                  |        y )Nrv  )__cuda_array_interface__r   )r  
interfacess    r?   r   z&_cudf_array_interfaces.<locals>.append  s.    Y )& 1 J JIf)$rA   r   )	r  dict_is_cudf_serr[   r  r   r/   rB  rC  )
r4   r%  r   r   r  r   r5  r"  interfaces_strr  s
            @r?   _cudf_array_interfacesr    s     23J%$ %4 %
 D

+!!==I55Iyo 	FAs#DIOO4!!!::	 I>>	9	 (

:(>?NrA   c                 J   	 ddl m} t	               t        |       r2 || j                        r^| j                  t        j                        } n>| j                  | j                  d      D ci c]  }|t        j                   c}      } t        |       r| j                  g}n| 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$                    }|Kg }|D ]D  }	 |	      rr|j+                  t,               #|j+                  t.        |	j                            F g }
t        |       r< | j                        rr| j0                  j2                  }|
j+                  |       ns| D ]n  }| |   j                  }	 |	      r-r+| |   j0                  j2                  }|
j+                  |       G |	      rt5        t6              |
j+                  g        p | |
||fS # t        $ r
 ddlm} Y w xY wc c}w c c}w c c}}w )	Nr   )r   r   )includec              3   ^   K   | ]$  }|j                   t        v xs  |      xr  & y wr   )r   r   ).0r[   r   r   s     r?   	<genexpr>z%_transform_cudf_df.<locals>.<genexpr>I  s?        	

** 	@ '>,>	@s   *-zcudf.core.multiindexr   r   )r  r   rO   r   r  r  r[   r   r8   r   select_dtypesr   allr   r   r'   r   r   r<   r   r   r   r   r   r!  r"  rG   r   )r4   ra   rb   r   r   r5  r   r   r   r[   r%  r"  r   s      `        @r?   _transform_cudf_dfr  .  sH   30 23D$;;rxx(D{{&*&8&8&8&HIsS"((]I
 D**   
 	!& !YYKMT\\+A<PDHLLQqSXXq&9!s1v&9:QMQ !1!1#!67M  	GE#E*/A$$U+$$%9%**%EF		G ID

+0BHHNNEU# 	%CIOOE#E*/AS	++  '%e, 11  $	% M=88{  3223 J( ':Qs/   I? 0JJ)J;	J?JJJc           	          t        | |||      \  } }}}t        | |      }t        j                         }t	        t        j                  |t        ||      t        j                  |                   |||fS )N)r`   r5   )	r  r  re   rf   r,   r(   XGDMatrixCreateFromCudaColumnarr0   rj   )	r4   r5   r`   ra   rb   r   r%  r  rl   s	            r?   _from_cudf_dfr  w  sz     5Gm],>51D)]M ,D)<N__F,,9LL 	
 =-//rA   c                     t        | dd      S )Nzcudf.core.seriesr#   r  rH   s    r?   r  r    s    4!3X>>rA   c                     t        | d      S )Nr  rz   rH   s    r?   _is_cupy_aliker    s    4344rA   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__Fr}   )cupyrE   r   r   r[   r   r   r   )r4   r  s     r?   _transform_cupy_arrayr    s_    434{9Szz$Uz+t

tzzl :{{4<<e{4KrA   c           	      
   t        |       } t        |       }t        j                         }t	        t        j                  ||d      d      }t        t        j                  ||t        j                  |                   |||fS )z%Initialize DMatrix from cupy ndarray.)r5   r`   r@  )r  r   re   rf   rA  rB  rC  r,   r(   %XGDMatrixCreateFromCudaArrayInterfacerj   )r4   r5   r`   ra   rb   interface_strrl   configs           r?   _from_cupy_arrayr    ss     !&D(.M__F4::'gFGQF2266<<#7	

 =-//rA   c                 ~    	 dd l }t        | |j                  j                  j
                        S # t        $ r Y yw xY wr   )cupyxrO   rN   scipysparserL   r4   r  s     r?   _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  rO   rN   r  r  rW   r  s     r?   _is_cupy_cscr    r  r  c                 L    dt        t        |             v xr dt        |       v S )N	PyCapsuledltensor)r<   r=   rH   s    r?   
_is_dlpackr    s#    #d4j/)EjCI.EErA   c                 @    ddl m} dt        |       vsJ  ||       } | S )Nr   )from_dlpackused_dltensor)r  r  r<   )r4   r  s     r?   _transform_dlpackr    s&     #d)+++tDKrA   c                 6    t        |       } t        | ||||      S r   )r  r  rc  s        r?   _from_dlpackr    s!     T"DD'7M=QQrA   c                 B    t        | t        t        j                  f      S r   )rN   r<   osr   rH   s    r?   _is_urir    s    dS"++.//rA   c                 R   t        | |       t        j                         }t        j                  t        j
                  j                  |             } t        t        |       t        |            }t        t        j                  |t        j                  |                   |||fS )N)urir_   )r@   re   rf   r  fspathpath
expanduserr0   r<   ri   r,   r(   XGDMatrixCreateFromURIrj   )r4   r5   ra   rb   r_   rl   r  s          r?   	_from_urir    sw     w'__F99RWW''-.DSYO8LMF++FFLL4HIJ=-//rA   c                 "    t        | t              S r   )rN   r   rH   s    r?   _is_listr    s    dD!!rA   c                 d    t        j                  |       }t        |        t        ||||||      S )Nr4   r5   r`   ra   rb   r_   )r8   r   rI   r   )r4   r5   r  ra   rb   r_   r   s          r?   
_from_listr    s8     HHTNEd##' rA   c                 "    t        | t              S r   )rN   tuplerH   s    r?   	_is_tupler    s    dE""rA   c                 $    t        | |||||      S )Nr4   r5   r  ra   rb   r_   )r  r  s         r?   _from_tupler    s#     ##' rA   c                 "    t        | t              S r   )rN   r)   rH   s    r?   _is_iterr    s    dH%%rA   c                     t        | d      S )Nr  rz   rH   s    r?   _has_array_protocolr  #  s    4%%rA   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   )	r:   r;   r=   r>   rM   rO   r  rL   	Exception)r4   r  s     r?   _convert_unknown_datar	  '  sq    MM
d4j\)MN||&&t, K  
  s"   A A 	AA	A&%A&F)r   r_   threadsc           	         t        |       s!t        |       st        |       st        |        t	        |       rt        | |||||      S t        |       rt        | |||||      S t        |       rt        | j                         |||||      S t        |       rt        | |||||      S t        |       rt        | ||||      S t        |       rt        | |||||      S t!        |       rt#        | |||||      S t        |       r't%               }|j'                  | j(                  | i      } t+        |       rt-        | ||||||      S t/        |       rt1        | ||||||      S t3        |       r| j4                  } t        |       rddl}|j'                  |       } t9        |       rt;        | ||||||      S t=        |       st        |       rt?        | |||||      S tA        |       rtC        | ||||      S tE        |       rtG        d      tI        |       rtG        d	      tK        |       rtM        | ||||      S tO        |       rt;        | |||||
      S tQ        |       rtS        | |||||      S tU        |       r%tW        jX                  |       }	t        |	||||      S t[        |       }
|
t        |
||||      S tG        dt]        t_        |             z         )zDispatch data for DMatrix.r  r  )r5   r  ra   rb   r_   r   N)r4   r   r5   r`   ra   rb   r_   )r4   r5   r`   ra   rb   r   zcupyx CSR is not supported yet.zcupyx CSC is not supported yet.)r4   r   r5   r`   ra   rb   re  rc  zNot supported type for data.)0r  r]  r  rI   rR   rm   rp   rs   rw   tocsrr{   r   r  r  r  r  r  r  r$   r"   r   r  r  r  r  r  _fsproxy_fastr   r   r[  r  r  r  r  r  	TypeErrorr  r  r  r   ra  rf  r  r8   r   r	  r<   r=   )r4   r5   r
  ra   rb   r   r_   plr   r   	converteds              r?   dispatch_data_backendr  9  sh    !$'!$'$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1''
 	
 "1''
 	
 4 

4  ''
 	
 &d+I''
 	
 2Sd_D
EErA   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 )NrC   zInvalid shape: z for rD   r   r   )rE   rC   rO  rF   rG   )r4   r   r   s      r?   _validate_meta_shaper    s    tW

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

Oq djjmq&8TZZ]a=Otzzl%vFGG >P&8  rA   fieldc                     t        | |      \  } }| j                  }|j                  dd       t        d      t	        |       }t        t        j                  |t        |      |             y )Nrv  zMasked array is not supported.)	rY   ry   getrG   r   r,   r(   XGDMatrixSetInfoFromInterfacer.   )r4   r  r[   rl   r  r  s         r?   rU  rU    sa     #4/KD%((I}}VT".9::#D)M2265<WXrA   c                 J    t        j                  |       }t        ||||       y r   )r8   r   rU  )r4   r  r[   rl   data_nps        r?   _meta_from_listr     s     hhtnGWeUF3rA   c                     t        | |||      S r   )r  )r4   r  r[   rl   s       r?   _meta_from_tupler    s     4v66rA   c                     |t         vrt        | j                  d d df   ||       y | j                  } t	        |       }t        t        j                  |t        |      |             y rh  )	rO  _meta_from_cudf_seriesilocr]   r   r,   r(   r  r.   )r4   r  rl   r  s       r?   _meta_from_cudf_dfr     sP    L tyyAv>{{(.	D66vuU|YWXrA   c                     t        | |       t        |       }t        t        j                  |t        |      |             y r   )r   r   r,   r(   r  r.   r4   r  rl   infs       r?   r  r    s1    D% 
t
$C2265<MNrA   c                     t        |       } t        |       }t        t        j                  |t        |      |             y r   )r  r   r,   r(   r  r.   r"  s       r?   _meta_from_cupy_arrayr%    s1     &D
t
$C2265<MNrA   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)r[   rl   rh   r   r   zUnsupported type for ))rl   r  r  r  r  r  r{   rU  r  r  r  r  r  r  r  r  r  r   rV  r]  r_  r  r  r%  r  r  r  r   r  r   ra  r]   r   rF   rC   r  r8   r   r  r<   r=   )r&  r4   r   r[   rl   r   s         r?   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DrA   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.

    kwargsr6   Nc                 B    || _         d| _        t        |   d       y )Nr   F)release_data)r+  itsuperr=  )r<  r+  	__class__s     r?   r=  z SingleBatchInternalIter.__init__j  s#     	e,rA   
input_datac                 r    | j                   dk(  ry| xj                   dz  c_          |di | j                   y)Nr   FTr  )r.  r+  )r<  r1  s     r?   nextzSingleBatchInternalIter.nextr  s/    77a<1!T[[!rA   c                     d| _         y rh  )r.  rH  s    r?   resetzSingleBatchInternalIter.resety  s	    rA   r6   N)rI  rJ  rK  rL  r   r=  r   r   r3  r5  __classcell__)r0  s   @r?   r*  r*  b  s3    - - -x D rA   r*  c                    t        |       r| j                  } t        |       st        |       rt	        | |||      S t        |       rt        |       } | d ||fS t        |       rt        |       d ||fS t        |       st        |       rt        j                  |       } t        |       rt        | | j                        \  } }| d ||fS t!        |       rt#        | d      } | d ||fS t%        |       r t#        | j'                         d      } | d ||fS t)        |       r t#        | j'                         d      } | d ||fS t+        |       rt-        | |||      \  }}}|d ||fS t/        |       rdd l}|j3                  |       } t5        |       rt7        | |||      \  }}}|d ||fS t9        |       rt;        | |||      \  }}}|d ||fS t=        dt?        tA        |             z         )NTr   .Value type is not supported for data iterator:)!r  r  r  r  r  r  r  r  r  r  r  r8   r   r{   rY   r[   rR   r^   rp   r  rw   r  r  r]  r   r"   r  r  r   rQ  r  r<   r=   )	r4   ra   rb   r   r\   df_plr   df_parZ  s	            r?   _proxy_transformr<  }  s    t!!4L.!-0B
 	
 d$T*T=-77$ &m]JJ~4xx~"44aT=-77D%dD1T=-77D%djjlD9T=-77D%djjlD9T=-77$.B$m]/
+}m dM=88||D!.D$m]/
+}m dM=88T+?$m],
(M= 455
Ds4PT:V
WWrA   c                 T     t         fdt        t        t        t        fD              S )z0Whether the data is a CUDA-based data structure.c              3   .   K   | ]  } |        y wr   r  )r  pr4   s     r?   r  zis_on_cuda.<locals>.<genexpr>  s     X1qwXs   )anyr  r  r  r  rH   s   `r?   
is_on_cudarA    s    XlNJ WXXXrA   proxyc                    t        |      s!t        |      st        |      st        |       t	        |      r!| j                  |t        t        |             yt        |      r!| j                  |t        t        |             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.Nr9  )r  r]  r  rI   r  _ref_data_from_cuda_columnarr   r   r  _ref_data_from_cuda_interfacer  r  rN   rm  r8  _ref_data_from_columnarr{   _ref_data_from_arrayrR   _ref_data_from_csrr  r<   r=   )rB  r4   r%  r   s       r?   dispatch_proxy_set_datarI    s    !$'!$'$4**4dI1FGD**4dI1FGd++D1$ &++D1$)+<=>%%d+$""4(D  &
Ds4PT:V
WC
IrA   )NNNr6  r   )rL  re   	functoolsrB  r  r:   typingr   r   r   r   r   r   r	   r
   r   r   r   r   numpyr8   _data_utilsr   r   r   r   r   r   r   r   _typingr   r   r   r   r   r   r   r   r    r!   compatr"   r#   r0  r$   r%   r&   r'   corer(   r)   r*   r+   r,   r-   r.   r/   r0   r  r  rf   DispatchedDataBackendReturnTyper   rO  r@   rI   r   rR   r^   ROWri   rm   rp   rs   rw   r1  r{   rY   r   r   r   r   r   r   pandas_pyarrow_mapperupdater   r   r<   r   r   r   r   cacher   r   r   r   r  r  r  r  r6  r8  rQ  rV  r[  r]  r_  ra  rf  numberrk  rm  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rA  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  rU  r  r  r   r  r%  r(  r*  r<  rA  rI  r  rA   r?   <module>rW     s'   $    	     	 	 	    & X X
 
 
 "'
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
#J/
2::x
++,
( 
8J+? 
BJJ 
( &3%6%60
**0 0 	0
 L)0 L)0 #0 %06* *Yy%9 **x *D *  "        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 & &F	 Fd2::.> FR; ;* -1,0C
CC L)C L)	C
 3-C h|4h|6LLMC$1
1
1 J1 OO	1
 
10 &3%6%60
0 0 	0
 0 L)0 L)0 #0 %06'H ' '0
00&.z&:0DJOO0	0"'8 ' '
  	
  L) L) %0 S$ryy/12  (47} 47n9H 9 9.
.. L). L)	.
 Xl3Xl5KKL.J &3%6%60
00 0 	0
 L)0 L)0 #0 %02 d8S=)  *h 5cD+A 0S
S
S JS OO	S
 
SHx HD HCH C CX $ ?

 L) L)	
 Xl3Xl5KKL< &3%6%60
00 0 	0
 L)0 L)0 #0 %02Eh E4 E( t   # 5      d u BF9
F9L)F9 L)F9 	F9
 6??D(<"8(<:PPQF9R0
0 0 	0
 L)0 L)0 0 %00?x ?D ?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hF
hF hF 	hF
 L)hF L)hF hF #hF %hFV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YS YT Y
))
) ~) 
	)rA   