Ë
    <�Dj 0  ã                   óä  — d Z ddl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 ddlZddlZddlmZ ddlmZmZmZmZ ddlmZ dd	lmZ d
dlmZ dej>                  dej@                  fd„Z! edd«      Z" e"dddddd«      Z#de
eej@                        de
ej@                     fd„Z$deejJ                     deejJ                  e&e'gdf   ddfd„Z( G d„ de«      Z)dejJ                  defd„Z*d ee&e	ej@                     f   d!e
e+   d"ee&ef   d#e
e   d$ee&ef   defd%„Z,deejJ                     d&e
ee&      d!e
e+   d'e'd(ee&ef   d)e'd*e'deee
e   f   fd+„Z-	 	 d0d,ed ed-e
e   d.e'dej@                  f
d/„Z.y)1z*Utilities for processing spark partitions.é    )ÚdefaultdictÚ
namedtuple)	ÚAnyÚCallableÚDictÚIteratorÚListÚOptionalÚSequenceÚTupleÚUnionN)Ú
csr_matrix)ÚDataIterÚDMatrixÚQuantileDMatrixÚXGBModel©Úconcaté   )Ú	ArrayLikeé   )Ú
get_loggerÚseriesÚreturnc                 óT   — | j                  d¬«      }t        j                  |«      }|S )zStack a series of arrays.F)Úcopy)Úto_numpyÚnpÚstack)r   Úarrays     úVC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\xgboost/spark/data.pyÚstack_seriesr"      s$   € à�O‰O ˆOÓ'€EÜ�H‰H�U‹O€EØ€Ló    ÚAlias)ÚdataÚlabelÚweightÚmarginÚvalidÚqidÚvaluesr&   r'   Ú
baseMarginÚvalidationIndicatorr*   Úseqc                 ó   — | rt        | «      S y)z&Concatenate the data if it's not None.Nr   )r.   s    r!   Úconcat_or_noner0      s   € á
Ü�c‹{ÐØr#   ÚiteratorÚappendc                 óž  ‡— dt         j                  dt        ddfˆfd„}d}| D ]§  }|€t        j                  |j
                  v }|du rt        j                  |j
                  v sJ ‚|rJ|j                  |t        j                      dd…f   }|j                  |t        j                     dd…f   }n|d}} ||d«       |€ŒŸ ||d«       Œ© y)znExtract partitions from pyspark iterator. `append` is a user defined function for
    accepting new partition.ÚpartÚis_validr   Nc                 óö   •—  ‰| t         j                  |«        ‰| t         j                  |«        ‰| t         j                  |«        ‰| t         j                  |«        ‰| t         j
                  |«       y )N)Úaliasr%   r&   r'   r(   r*   )r4   r5   r2   s     €r!   Ú	make_blobz#cache_partitions.<locals>.make_blob+   sS   ø€ Ùˆt”U—Z‘Z Ô*Ùˆt”U—[‘[ (Ô+Ùˆt”U—\‘\ 8Ô,Ùˆt”U—\‘\ 8Ô,Ùˆt”U—Y‘Y Õ)r#   TF)ÚpdÚ	DataFrameÚboolr7   r)   ÚcolumnsÚloc)r1   r2   r8   Úhas_validationr4   Útrainr)   s    `     r!   Úcache_partitionsr@   %   sË   ø€ ð*œŸ™ð *´ð *¸õ *ð &*€Nàò #ˆØÐ!Ü"Ÿ[™[¨D¯L©LÐ8ˆNØ˜TÑ!Ü—;‘; $§,¡,Ñ.Ñ.áØ—H‘H˜d¤5§;¡;Ñ/Ð/²Ð2Ñ3ˆEØ—H‘H˜T¤%§+¡+Ñ.²Ð1Ñ2‰Eà �5ˆEá�%˜ÔØÑÙ�e˜TÕ"ñ#r#   c                   ó¦   ‡ — e Zd ZdZdeeef   dee   de	ddfˆ fd„Z
deeej                        deej                     fd„Zd	edefd
„Zdd„Zˆ xZS )ÚPartIterz7Iterator for creating Quantile DMatrix from partitions.r%   Ú	device_idÚkwargsr   Nc                 ó^   •— d| _         || _        || _        || _        t        ‰| �  d¬«       y )Nr   T)Úrelease_data)Ú_iterÚ
_device_idÚ_dataÚ_kwargsÚsuperÚ__init__)Úselfr%   rC   rD   Ú	__class__s       €r!   rL   zPartIter.__init__H   s1   ø€ ð ˆŒ
Ø#ˆŒØˆŒ
ØˆŒä‰Ñ dÐÕ+r#   c                 óè   — |sy | j                   �Udd l}dd l}|j                  j                  j                  | j                   «       |j                  || j                     «      S || j                     S ©Nr   )rH   ÚcudfÚcupyÚcudaÚruntimeÚ	setDevicer:   rG   )rM   r%   rQ   Úcps       r!   Ú_fetchzPartIter._fetchR   s[   € ÙØà�?‰?Ð&ÛÛð �G‰G�O‰O×%Ñ% d§o¡oÔ6Ø—>‘> $ t§z¡zÑ"2Ó3Ð3à�D—J‘JÑÐr#   Ú
input_datac                 óÒ  — | j                   t        | j                  t        j                     «      k(  ry |d| j                  | j                  t        j                     «      | j                  | j                  j                  t        j                  d «      «      | j                  | j                  j                  t        j                  d «      «      | j                  | j                  j                  t        j                  d «      «      | j                  | j                  j                  t        j                  d «      «      dœ| j                  ¤Ž | xj                   dz  c_         y)Nr   ©r%   r&   r'   Úbase_marginr*   r   © )rG   ÚlenrI   r7   r%   rW   Úgetr&   r'   r(   r*   rJ   )rM   rX   s     r!   ÚnextzPartIter.nexta   så   € Ø�:‰:œ˜TŸZ™Z¬¯
©
Ñ3Ó4Ò4ØÙð 	
Ø—‘˜TŸZ™Z¬¯
©
Ñ3Ó4Ø—+‘+˜dŸj™jŸn™n¬U¯[©[¸$Ó?Ó@Ø—;‘;˜tŸz™zŸ~™~¬e¯l©l¸DÓAÓBØŸ™ D§J¡J§N¡N´5·<±<ÀÓ$FÓGØ—‘˜DŸJ™JŸN™N¬5¯9©9°dÓ;Ó<ñ	
ð �l‰lò	
ð 	�
Š
�a‰�
Ør#   c                 ó   — d| _         y rP   )rG   )rM   s    r!   ÚresetzPartIter.reseto   s	   € Øˆ�
r#   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr	   r
   Úintr   rL   r   r9   r:   rW   r   r_   ra   Ú__classcell__)rN   s   @r!   rB   rB   E   sy   ø„ ÙAð,Ø˜˜d˜‘Oð,Ø08¸±ð,ØILð,à	õ,ð ˜8 H¨R¯\©\Ñ$:Ñ;ð  ÀÈÏÉÑ@Vó  ð˜xð ¨Có ÷r#   rB   r4   c                 óv  — g dgg }}}d}t        | j                  | j                  | j                  | j                  «      D ]ž  \  }}}}|dk(  rt        |«      }	|}
|}n2t        |«      }	t        j                  |	t        j                  ¬«      }
|}|dk(  r|	}||	k(  sJ ‚|j                  |
«       |j                  |d   t        |
«      z   «       |j                  |«       Œ  t        j                  |«      }t        j                  |«      }t        j                  |«      }t        |||ft        | «      |f¬«      S )Nr   )Údtypeéÿÿÿÿ)Úshape)ÚzipÚfeatureVectorTypeÚfeatureVectorSizeÚfeatureVectorIndicesÚfeatureVectorValuesrg   r]   r   ÚarangeÚint32r2   r    Úconcatenater   )r4   Úcsr_indices_listÚcsr_indptr_listÚcsr_values_listÚ
n_featuresÚvec_typeÚ	vec_size_Úvec_indicesÚ
vec_valuesÚvec_sizeÚcsr_indicesÚ
csr_valuesÚcsr_indptr_arrÚcsr_indices_arrÚcsr_values_arrs                  r!   Ú)_read_csr_matrix_from_unwrapped_spark_vecrƒ   s   s7  € à9;¸a¸SÀ" �oÐà€Jä8;Ø×ÑØ×ÑØ×!Ñ!Ø× Ñ ó	9ò +Ñ4ˆ�)˜[¨*ð �qŠ=ä˜9“~ˆHØ%ˆKØ#‰Jô ˜:“ˆHÜŸ)™) H´B·H±HÔ=ˆKØ#ˆJà˜Š?Ø!ˆJØ˜XÒ%Ñ%à×Ñ Ô,Ø×Ñ˜¨rÑ2´S¸Ó5EÑEÔFØ×Ñ˜zÕ*ð5+ô8 —X‘X˜oÓ.€NÜ—n‘nÐ%5Ó6€OÜ—^‘^ OÓ4€NäØ	˜¨.Ð9Ä#ÀdÃ)ÈZÐAXôð r#   r%   Údev_ordinalÚmetaÚrefÚparamsc                 ó„   — | s t        t        j                  d«      |¬«      S t        | |fi |¤Ž}t        |fi |¤d|i¤Ž}|S )z+Handle empty partition for QuantileDMatrix.©r   r   )r†   r†   )r   r   ÚemptyrB   )r%   r„   r…   r†   r‡   ÚitÚms          r!   Úmake_qdmr�   ž   sG   € ñ ÜœrŸx™x¨Ó/°SÔ9Ð9Ü	�$˜Ñ	, tÑ	,€BÜ˜Ñ.˜fÑ.¨#Ò.€AØ€Hr#   Úfeature_colsÚuse_qdmrD   Úenable_sparse_data_optimÚhas_validation_colc           	      ó¦  ‡‡‡‡‡— t        t        «      Št        t        «      ŠdŠdt        j                  dt        dt
        ddfˆˆˆˆfd„}dt        j                  dt        dt
        ddfˆˆˆfd„}d	t        t        t        t        j                     f   d
t        t        t        f   dt        fd„}	|r|}
d‰v r‰d   dk(  sJ ‚|}
dt        t        t        t        f   t        t        t        t        t        t
        f   f   f   fˆfd„} |«       \  }}‰�|rt!        | |
«       t#        ‰||d|«      }nO‰�|st!        | |
«        |	‰‰«      }n5‰€|rt!        | |
«       t#        ‰||d|«      }nt!        | |
«        |	‰‰«      }|r |rt#        ‰||||«      }n|r	 |	‰‰«      nd}nd}|�#|j%                  «       |j%                  «       k(  sJ ‚||fS )a~  Create DMatrix from spark data partitions.

    Parameters
    ----------
    iterator :
        Pyspark partition iterator.
    feature_cols:
        A sequence of feature names, used only when rapids plugin is enabled.
    dev_ordinal:
        Device ordinal, used when GPU is enabled.
    use_qdm :
        Whether QuantileDMatrix should be used instead of DMatrix.
    kwargs :
        Metainfo for DMatrix.
    enable_sparse_data_optim :
        Whether sparse data should be unwrapped
    has_validation:
        Whether there's validation data.

    Returns
    -------
    Training DMatrix and an optional validation DMatrix.
    r   r4   Únamer5   r   Nc                 óö  •— |t         j                  k(  s|| j                  v r×|t         j                  k(  r‰�| ‰   j                  d   dkD  r| ‰   }n;| |   j                  d   dkD  r$| |   }|t         j                  k(  rt	        |«      }nd }|t         j                  k(  r*|�(‰dk(  r|j                  d   Š‰|j                  d   k(  sJ ‚|€y |r‰|   j                  |«       y ‰|   j                  |«       y y ©Nr   r   )r7   r%   r<   rl   r"   r2   )r4   r“   r5   r    rŽ   rx   Ú
train_dataÚ
valid_datas       €€€€r!   Úappend_mz0create_dmatrix_from_partitions.<locals>.append_mÓ   s÷   ø€ à”5—:‘:Ò ¨¯©Ñ!5àœŸ
™
Ò"Ø Ð,Ø˜Ñ&×,Ñ,¨QÑ/°!Ò3à.2°<Ñ.@‘Ø�d‘×!Ñ! !Ñ$ qÒ(Ø˜T™
�Øœ5Ÿ:™:Ò%ä(¨Ó/‘Eà�à”u—z‘zÒ! eÐ&7Ø ’?Ø!&§¡¨Q¡�JØ! U§[¡[°¡^Ò3Ñ3àˆ}ØáØ˜4Ñ ×'Ñ'¨Õ.à˜4Ñ ×'Ñ'¨Õ.ð5 "6r#   c                 ó6  •— |t         j                  k(  s|| j                  v rw|t         j                  k(  r3t        | «      }‰dk(  r|j                  d   Š‰|j                  d   k(  sJ ‚| |   }|r‰|   j                  |«       y ‰|   j                  |«       y y r•   )r7   r%   r<   rƒ   rl   r2   )r4   r“   r5   r    rx   r–   r—   s       €€€r!   Úappend_m_sparsez7create_dmatrix_from_partitions.<locals>.append_m_sparseñ   s�   ø€ ð ”5—:‘:Ò ¨¯©Ñ!5Ø”u—z‘zÒ!ÜAÀ$ÓG�Ø ’?Ø!&§¡¨Q¡�JØ! U§[¡[°¡^Ò3Ñ3à˜T™
�áØ˜4Ñ ×'Ñ'¨Õ.à˜4Ñ ×'Ñ'¨Õ.ð "6r#   r+   rD   c           	      ó4  — t        | «      dk(  r:t        d«      j                  d«       t        ddt	        j
                  d«      i|¤ŽS t        | t        j                     «      }t        | j                  t        j                  d «      «      }t        | j                  t        j                  d «      «      }t        | j                  t        j                  d «      «      }t        | j                  t        j                  d «      «      }t        d|||||dœ|¤ŽS )Nr   ÚXGBoostPySparkz_Detected an empty partition in the training data. Consider to enable repartition_random_shuffler%   r‰   rZ   r\   )r]   r   Úwarningr   r   rŠ   r0   r7   r%   r^   r&   r'   r(   r*   )r+   rD   r%   r&   r'   r(   r*   s          r!   Úmakez,create_dmatrix_from_partitions.<locals>.make  sá   € Üˆv‹;˜!ÒÜÐ'Ó(×0Ñ0ð.ôô
 Ñ;¤§¡¨Ó 0Ð;°FÑ;Ð;ä˜f¤U§Z¡ZÑ0Ó1ˆÜ˜vŸz™z¬%¯+©+°tÓ<Ó=ˆÜ §
¡
¬5¯<©<¸Ó >Ó?ˆÜ §
¡
¬5¯<©<¸Ó >Ó?ˆÜ˜VŸZ™Z¬¯	©	°4Ó8Ó9ˆÜð 
Ø˜U¨6¸vÈ3ñ
ØRXñ
ð 	
r#   Úmissingg        c                  óf   •— d} i }i }‰j                  «       D ]  \  }}|| v r|||<   Œ|||<   Œ ||fS )N)Úmax_binrŸ   ÚsilentÚnthreadÚenable_categorical)Úitems)Únon_data_keysÚnon_data_paramsr…   ÚkÚvrD   s        €r!   Úsplit_paramsz4create_dmatrix_from_partitions.<locals>.split_params  sW   ø€ ð

ˆð ˆØˆØ—L‘L“Nò 	‰DˆAˆqØ�MÑ!Ø%&� Ò"à��Q’ð		ð
 �_Ð$Ð$r#   )r   Úlistr9   r:   rf   r;   r   r	   r   Úndarrayr   r   r   r   rg   Úfloatr@   r�   Únum_col)r1   rŽ   r„   r�   rD   r�   r‘   r˜   rš   rž   Ú	append_fnrª   r…   r‡   ÚdtrainÚdvalidrx   r–   r—   s    `  `           @@@r!   Úcreate_dmatrix_from_partitionsr²   ­   sä  ü€ ôB /:¼$Ó.?€JÜ.9¼$Ó.?€Jà€Jð/”r—|‘|ð /¬3ð /¼$ð /À4÷ /ð /ð</œbŸl™lð /´#ð /Äð /È$÷ /ð"
”Tœ#œt¤B§J¡JÑ/Ð/Ñ0ð 
¼$¼sÄC¸x¹.ð 
ÌWó 
ñ$  Ø#ˆ	Ø˜FÑ" v¨iÑ'8¸CÒ'?Ñ?àˆ	ð%œ%¤¤S¬# X¡´´S¼%ÄÄUÌDÐ@PÑ:QÐ5QÑ0RÐ RÑSõ %ñ*  “>�L€Dˆ&àÐ¡GÜ˜ 9Ô-Ü" :¨{¸DÀ$ÈÓO‰Ø	Ð	!©'Ü˜ 9Ô-Ù�j &Ó)‰Ø	Ð	¡'Ü˜ 9Ô-Ü˜* k°4¸¸vÓF‰ä˜ 9Ô-Ù�j &Ó)ˆñ ÙÜ(0Ø˜K¨¨v°vó)‰Fñ 2D‘T˜* fÔ-È‰FàˆàÐØ�~‰~Ó 6§>¡>Ó#3Ò3Ñ3à�6ˆ>Ðr#   Úmodelr[   Ústrict_shapec                 óÞ   — | j                  d«      }t        ||| j                  | j                  | j                  | j
                  ¬«      }| j                  «       j                  |dd||¬«      S )z4Predict contributions with data with the full model.N)r[   rŸ   r£   Úfeature_typesr¤   TF)Úpred_contribsÚvalidate_featuresÚiteration_ranger´   )Ú_get_iteration_ranger   rŸ   Ún_jobsr¶   r¤   Úget_boosterÚpredict)r³   r%   r[   r´   r¹   Údata_dmatrixs         r!   r·   r·   T  sv   € ð ×0Ñ0°Ó6€OÜØØØ—‘Ø—‘Ø×)Ñ)Ø ×3Ñ3ô€Lð ×ÑÓ×&Ñ&ØØØØ'Ø!ð 'ó ð r#   )NF)/re   Úcollectionsr   r   Útypingr   r   r   r   r	   r
   r   r   r   Únumpyr   Úpandasr9   Úscipy.sparser   Úxgboostr   r   r   r   Úxgboost.compatr   Ú_typingr   Úutilsr   ÚSeriesr¬   r"   r$   r7   r0   r:   rf   r;   r@   rB   rƒ   rg   r�   r²   r·   r\   r#   r!   ú<module>rÉ      s-  ðá 0ß /ß X× XÕ Xã Û Ý #ç @Ó @Ý !å Ý ð˜Ÿ™ð  r§z¡zó ñ 	�7ÐQÓR€Ùˆh˜ ¨<Ð9NÐPUÓV€ð˜ ¨"¯*©*Ñ!5Ñ6ð ¸8ÀBÇJÁJÑ;Oó ð#Ø�r—|‘|Ñ$ð#Ø.6¸¿¹ÀcÈ4Ð7PÐRVÐ7VÑ.Wð#à	ó#ô@+ˆxô +ð\(°B·L±Lð (ÀZó (ðVØ
ˆs�D˜Ÿ™Ñ$Ð$Ñ
%ðà˜#‘ðð ˆs�Cˆx‰.ðð 
�'Ñ	ð	ð
 ��c�‰Nðð óðdØ�r—|‘|Ñ$ðdà˜8 C™=Ñ)ðdð ˜#‘ðdð ð	dð
 ��c�‰Nðdð #ðdð ðdð ˆ7�H˜WÑ%Ð%Ñ&ódðT (,Øñ	Øðà
ðð ˜)Ñ$ðð ð	ð
 ‡Z�Zôr#   