Ë
    »Ó^j‹; ã                   óŽ  — U d Z ddlm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	 ddl
mZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddl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#m$Z$m%Z% ddl&Z'ddl(m)Z* ddl+mZ, ddl-Z.ddl/Z0ddl1m2Z2m3Z3m4Z4m5Z5m6Z6 erddlm7Z7m8Z8 g d¢Z9ejt                  Z;ejt                  Z<e%d   Z=e%d   Z>e%d   Z?e%d   Z@e$eAeBeCf   ZDeeAeeAeBf   f   ZEe%e eA   e eF   df   ZGe%e eA   df   ZHe%e eB   e eF   e.j’                  e6e,j”                  f   ZKe%e.j’                  e6e,j”                  f   ZLe%e eB   e e eB      e.j’                  e6e5e,j”                  e,jš                  f   ZNe%eAee.j’                  e5e0jž                  j                   de d   e e.j’                     e,jš                  f	   ZQe%e eB   e eF   e.j’                  e6e5e,j”                  e,jš                  f   ZRe%eAee.j’                  e5e0jž                  j                   e,jš                  f   ZSe%e.j’                  e0jž                  j                   e e0jž                  j                      f   ZTe%e0jž                  j                   e e0jž                  j                      f   ZUe%e eB   e eF   e.j’                  e6e,j”                  f   ZVe%e e eB      e e eF      e eB   e eF   e.j’                  e6e5e,jš                  f   ZWdZXh d£ZY G d„ deZ«      Z[deBdeCfd„Z\deFdeAdeFfd „Z]d!e.j’                  de$e.j’                  eFf   fd"„Z^ G d#„ d$e«      Z_ G d%„ d&«      Z` e`«       aaeebd'<   d(acd)add*ed+eAdeCfd,„Ze	 	 dŠd*ed-eAd.eAddfd/„Zfd0eeAgdf   deeAgdf   fd1„Zgd2eAddfd3„Zhd2eAddfd4„Ziegd2eAddfd5„«       Zjd2ekddfd6„Zl ejÚ                  d7d8«      d9k7  rŠejÜ                  ejÞ                  _p         ejâ                  dejÜ                  «      Zr erel«      e_r         ejæ                  ejä                  «      dk7  r& e[ ejÞ                  «       jé                  d:«      «      ‚eFeBeCfZud;eFddfd<„Zvd=edeCfd>„Zwd?edeCfd@„Zxd?edeCfdA„ZydBe.j’                  dCdDde.j’                  fdE„Zzd?edeCfdF„Z{d?eddGfdH„Z|d?eddIfdJ„Z}d?edeCfdK„Z~d?edCdDdLeAde.j’                  fdM„Zd?edeCfdN„Z€d?edeCfdO„Z�d?edeCfdP„Z‚e�j                  �j                  Z…ejt                  e…_p        e�j                  ejÜ                  ge…_‡        dQeˆdejt                  fdR„Z‰d?edCdDdLeAde.j’                  fdS„ZŠdTdUdVeFde.j’                  fdW„Z‹dTdUdVeFde.j’                  fdX„ZŒdTdUdVeFde.j’                  fdY„Z�dTdUdVeFde.j’                  fdZ„ZŽd[eAdejÜ                  fd\„Z�d]e�d^e e   de�j"                  fd_„Z’d=edefd`„Z“de%eFeBeAe f   deAfda„Z”d?e"eeAef      deAfdb„Z• G dc„ dd«      Z– G de„ dfe—«      Z˜ G dg„ dh«      Z™dieAdeeAef   djedeeAef   fdk„ZšdlZ›	 dZœdZ�dmZždnZŸ	 dZ dZ¡	 dZ¢dZ£dmZ¤dnZ¥	 dZ¦dZ§	 dZ¨dZ©	 eœeœe�ežeždoœZª	 e¨e©dpœZ«d?e.j’                  de.j’                  fdq„Z¬d?e.j’                  de$e?eFe.j’                  f   fdr„Z­d?e.j’                  de$e=eFe.j’                  f   fds„Z®dCe�deCfdt„Z¯due6ddfdv„Z°d?e5dwdDde.j’                  fdx„Z±d?e5dyeHdzeGd{e"e e       de$e.j’                  e eA   e%e eA   e eF   f   e e    f   f
d|„Z²	 d‹d{e"e e       d}e"e%eAef      deAfd~„Z³	 	 dŒd}e"e%eAef      de"eA   de"e e       fd€„Z´ G d�„ de�jj                  «      Z¶ G d‚„ dƒ«      Z· G d„„ d…«      Z¸ee.j’                  e¸ge$e.j’                  e.j’                  f   f   Z¹e%ee.j’                  e¸geDf   ee.j’                  e¸ge eD   f   f   Zº G d†„ d‡e!«      Z» G dˆ„ d‰«      Z¼y)�zWrapper for C API of LightGBM.é   )Ú_LIBé    N)ÚOrderedDict)Údeepcopy)ÚEnum)Úwraps)ÚSEEK_ENDÚenviron)Úgetsize)ÚPath)ÚNamedTemporaryFile)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚIterableÚIteratorÚListÚ
NamedTupleÚOptionalÚSetÚTupleÚUnion)ÚPANDAS_INSTALLEDÚconcatÚpd_CategoricalDtypeÚpd_DataFrameÚ	pd_Series)ÚLiteralÚ	TypeGuard)ÚBoosterÚDatasetÚLGBMDeprecationWarningÚLightGBMErrorÚregister_loggerÚSequence)zctypes._Pointer[ctypes.c_int32]zctypes._Pointer[ctypes.c_int64])z-ctypes.Array[ctypes._Pointer[ctypes.c_int32]]z-ctypes.Array[ctypes._Pointer[ctypes.c_int64]])zctypes._Pointer[ctypes.c_float]z ctypes._Pointer[ctypes.c_double])z-ctypes.Array[ctypes._Pointer[ctypes.c_float]]z.ctypes.Array[ctypes._Pointer[ctypes.c_double]]zLiteral['auto']r&   gzø·¥•ª8>   ÚovaÚovrÚsoftmaxÚ
multiclassÚmulticlassovaÚmulticlass_ovac                   ó   — e Zd ZdZy)r$   zError thrown by LightGBM.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úY/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/lightgbm/basic.pyr$   r$   ˜   s   „ Ù#àr4   r$   ÚxÚreturnc                 ó4   — t          | cxk  xr	 t         k  S c S ©N)ÚZERO_THRESHOLD©r6   s    r5   Ú_is_zeror<   ž   s   € Üˆ?˜aÖ1¤>Ñ1Ð1Ñ1Ð1r4   Ú
total_nrowÚparamsc           	      óâ   — t        j                  d«      }t        t        j                  t        j
                  | «      t        |«      t        j                  |«      «      «       |j                  S )Nr   )	ÚctypesÚc_intÚ
_safe_callr   ÚLGBM_GetSampleCountÚc_int32Ú_c_strÚbyrefÚvalue)r=   r>   Ú
sample_cnts      r5   Ú_get_sample_countrI   ¢   sR   € Ü—‘˜a“€JÜÜ× Ñ Ü�N‰N˜:Ó&Ü�6‹NÜ�L‰L˜Ó$ó	
ôð ×ÑÐr4   Úmatc                 ó,  — | j                   t        j                  t        j                  fv r| j                   }nt        j                  }| j                  d   r	d}t
        }nd}t        }t        j                  | ||¬«      }|j                  |¬«      |fS )NÚF_CONTIGUOUSÚFÚC)ÚdtypeÚorder©rP   )	rO   ÚnpÚfloat32Úfloat64ÚflagsÚ_C_API_IS_COL_MAJORÚ_C_API_IS_ROW_MAJORÚasarrayÚravel)rJ   rO   rP   ÚlayoutÚdatas        r5   Ú_np2d_to_np1dr\   ®   su   € à
‡y�y”R—Z‘Z¤§¡Ð,Ñ,Ø—	‘	‰ä—
‘
ˆà
‡y�y�Ò ØˆÜ$‰àˆÜ$ˆä�:‰:�c ¨eÔ4€Dà�:‰:˜Eˆ:Ó" FÐ*Ð*r4   c                   ó   — e Zd ZdZdZdZy)Ú_MissingTypeÚNoneÚNaNÚZeroN)r/   r0   r1   ÚNONEÚNANÚZEROr3   r4   r5   r^   r^   Á   s   „ Ø€DØ
€CØ�Dr4   r^   c                   ó,   — e Zd Zdeddfd„Zdeddfd„Zy)Ú_DummyLoggerÚmsgr7   Nc                 ó   — t        |«       y r9   )Úprint©Úselfrg   s     r5   Úinfoz_DummyLogger.infoÈ   s	   € Üˆc�
r4   c                 ó2   — t        j                  |d¬«       y )Né   )Ú
stacklevel)ÚwarningsÚwarnrj   s     r5   Úwarningz_DummyLogger.warningË   s   € Ü�‰�c aÖ(r4   )r/   r0   r1   Ústrrl   rr   r3   r4   r5   rf   rf   Ç   s(   „ ð˜ð  ó ð)˜3ð ) 4ô )r4   rf   Ú_LOGGERrl   rr   ÚloggerÚmethod_namec                 ó.   — t        t        | |d «      «      S r9   )ÚcallableÚgetattr)ru   rv   s     r5   Ú_has_methodrz   Ô   s   € Ü”G˜F K°Ó6Ó7Ð7r4   Úinfo_method_nameÚwarning_method_namec                 ód   — t        | |«      rt        | |«      st        d|› d|› d�«      ‚| a|a|ay)a,  Register custom logger.

    Parameters
    ----------
    logger : Any
        Custom logger.
    info_method_name : str, optional (default="info")
        Method used to log info messages.
    warning_method_name : str, optional (default="warning")
        Method used to log warning messages.
    zLogger must provide 'z' and 'z' methodN)rz   Ú	TypeErrorrt   Ú_INFO_METHOD_NAMEÚ_WARNING_METHOD_NAME)ru   r{   r|   s      r5   r%   r%   Ø   sL   € ô  �vÐ/Ô0¼ÀFÐL_Ô8`ÜÐ/Ð0@Ð/AÀÐI\ÐH]Ð]eÐfÓgÐgð €GØ(ÐØ.Ñr4   Úfuncc                 óH   ‡ ‡— g Št        ‰ «      dt        ddfˆ ˆfd„«       }|S )z;Join log messages from native library which come by chunks.rg   r7   Nc                 ó„   •— | j                  «       dk(  rdj                  ‰«      } g Š ‰| «      S ‰j                  | «       y )NÚ )ÚstripÚjoinÚappend)rg   r�   Úmsg_normalizeds    €€r5   Úwrapperz)_normalize_native_string.<locals>.wrapperõ   s>   ø€ ð �9‰9‹;˜"ÒØ—'‘'˜.Ó)ˆCØˆNÙ˜“9Ðà×!Ñ! #Õ&r4   )r   rs   )r�   r‰   rˆ   s   ` @r5   Ú_normalize_native_stringrŠ   ñ   s3   ù€ à "€Nä
ˆ4ƒ[ð'”Sð '˜Tõ 'ó ð'ð €Nr4   rg   c                 ó8   —  t        t        t        «      | «       y r9   ©ry   rt   r   ©rg   s    r5   Ú	_log_inforŽ     s   € Ø'„GŒGÔ&Ó'¨Õ,r4   c                 ó8   —  t        t        t        «      | «       y r9   )ry   rt   r€   r�   s    r5   Ú_log_warningr�     s   € Ø*„GŒGÔ)Ó*¨3Õ/r4   c                 ó8   —  t        t        t        «      | «       y r9   rŒ   r�   s    r5   Ú_log_nativer’   
  s   € à'„GŒGÔ&Ó'¨Õ,r4   c                 óJ   — t        t        | j                  d«      «      «       y)z.Redirect logs from native library into Python.úutf-8N)r’   rs   Údecoder�   s    r5   Ú_log_callbackr–     s   € ä”�C—J‘J˜wÓ'Ó(Õ)r4   ÚLIGHTGBM_BUILD_DOCÚFalseÚTruer”   Úretc                 óf   — | dk7  r,t        t        j                  «       j                  d«      «      ‚y)z„Check the return value from C API call.

    Parameters
    ----------
    ret : int
        The return value from C API calls.
    r   r”   N)r$   r   ÚLGBM_GetLastErrorr•   )rš   s    r5   rB   rB      s/   € ð ˆa‚xÜœD×2Ñ2Ó4×;Ñ;¸GÓDÓEÐEð r4   Úobjc                 óF   — 	 t        | «       y# t        t        f$ r Y yw xY w)zCCheck whether object is a number or not, include numpy number, etc.TF)Úfloatr~   Ú
ValueError©r�   s    r5   Ú_is_numericr¢   ,  s*   € ðÜˆcŒ
ØøÜ”zÐ"ò ñ ðús   ‚ Ž Ÿ r[   c                 ój   — t        | t        j                  «      xr t        | j                  «      dk(  S )z(Check whether data is a numpy 1-D array.r   ©Ú
isinstancerR   ÚndarrayÚlenÚshape©r[   s    r5   Ú_is_numpy_1d_arrayrª   7  s%   € ä�dœBŸJ™JÓ'Ò@¬C°·
±
«O¸qÑ,@Ð@r4   c                 ó€   — t        | t        j                  «      sy| j                  }t	        |«      dk(  xr |d   dk(  S )z+Check whether data is a column numpy array.Fé   r   )r¥   rR   r¦   r¨   r§   )r[   r¨   s     r5   Ú_is_numpy_column_arrayr­   <  s7   € ä�dœBŸJ™JÔ'ØØ�J‰J€EÜˆu‹:˜‰?Ò,˜u Q™x¨1™}Ð,r4   ÚarrayrO   znp.typing.DTypeLikec                 óJ   — | j                   |k(  r| S | j                  |d¬«      S )z Cast numpy array to given dtype.F©rO   Úcopy)rO   Úastype)r®   rO   s     r5   Ú_cast_numpy_array_to_dtyper³   D  s&   € à‡{�{�eÒØˆØ�<‰<˜e¨%ˆ<Ó0Ð0r4   c                 óL   — t        | t        «      xr |  xs t        | d   «      S )z!Check whether data is a 1-D list.r   )r¥   Úlistr¢   r©   s    r5   Ú_is_1d_listr¶   K  s$   € ä�dœDÓ!ÒH¨4 xÒ'G´;¸tÀA¹wÓ3GÐHr4   zTypeGuard[List[np.ndarray]]c                 óJ   — t        | t        «      xr t        d„ | D «       «      S )Nc              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr9   )r¥   rR   r¦   ©Ú.0r6   s     r5   ú	<genexpr>z+_is_list_of_numpy_arrays.<locals>.<genexpr>Q  s   è ø€ Ò)RÈ¬*°Q¼¿
¹
×*CÑ)Rùs   ‚$&©r¥   rµ   Úallr©   s    r5   Ú_is_list_of_numpy_arraysr¾   P  s   € Ü�dœDÓ!ÒR¤cÑ)RÈTÔ)RÓ&RÐRr4   zTypeGuard[List[Sequence]]c                 óJ   — t        | t        «      xr t        d„ | D «       «      S )Nc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr9   )r¥   r&   r¹   s     r5   r»   z(_is_list_of_sequences.<locals>.<genexpr>U  s   è ø€ Ò)PÀa¬*°Q¼×*AÑ)Pùs   ‚r¼   r©   s    r5   Ú_is_list_of_sequencesrÁ   T  s   € Ü�dœDÓ!ÒP¤cÑ)PÈ4Ô)PÓ&PÐPr4   c                 óp   — t        | «      xs* t        | «      xs t        | «      xs t        | t        «      S )z'Check whether data is a 1-D collection.)rª   r­   r¶   r¥   r   r©   s    r5   Ú_is_1d_collectionrÃ   X  s2   € ä˜dÓ#ÒwÔ'=¸dÓ'CÒwÄ{ÐSWÓGXÒwÔ\fÐgkÔmvÓ\wÐwr4   Únamec                 ó¶  — t        | «      rt        | |«      S t        | «      r't        d«       | j	                  «       }t        ||«      S t        | «      rt        j                  | |¬«      S t        | t        «      r:t        | j                  «       j                  «       t        j                  | |¬«      S t        dt        | «      j                  › d|› d�«      ‚)z Convert data to numpy 1-D array.z$Converting column-vector to 1d array©rO   úWrong type(ú) for z5.
It should be list, numpy 1-D array or pandas Series)rª   r³   r­   r�   rY   r¶   rR   rX   r¥   r   Ú_check_for_bad_pandas_dtypesÚto_frameÚdtypesr~   Útyper/   )r[   rO   rÄ   r®   s       r5   Ú_list_to_1d_numpyrÍ   ]  sµ   € ô ˜$ÔÜ)¨$°Ó6Ð6Ü	 Ô	%ÜÐ;Ô<Ø—
‘
“ˆÜ)¨%°Ó7Ð7Ü	�TÔ	Ü�z‰z˜$ eÔ,Ð,Ü	�Dœ)Ô	$Ü$ T§]¡]£_×%;Ñ%;Ô<Ü�z‰z˜$ eÔ,Ð,äØœ$˜t›*×-Ñ-Ð.¨f°T°FÐ:pÐqó
ð 	
r4   c                 ó’   — t        | t        j                  «      xr, t        | j                  «      dk(  xr | j                  d   dkD  S )z(Check whether data is a numpy 2-D array.r¬   r   r¤   r©   s    r5   Ú_is_numpy_2d_arrayrÏ   u  s9   € ä�dœBŸJ™JÓ'ÒV¬C°·
±
«O¸qÑ,@ÒVÀTÇZÁZÐPQÁ]ÐUVÑEVÐVr4   c                 ób   — t        | t        «      xr t        | «      dkD  xr t        | d   «      S )z!Check whether data is a 2-D list.r   )r¥   rµ   r§   r¶   r©   s    r5   Ú_is_2d_listrÑ   z  s*   € ä�dœDÓ!ÒL¤c¨$£i°!¡mÒL¼ÀDÈÁGÓ8LÐLr4   c                 óV   — t        | «      xs t        | «      xs t        | t        «      S )z'Check whether data is a 2-D collection.)rÏ   rÑ   r¥   r   r©   s    r5   Ú_is_2d_collectionrÓ     s#   € ä˜dÓ#ÒZ¤{°4Ó'8ÒZ¼JÀtÌ\Ó<ZÐZr4   Ú	pycapsulec                 ó@   — t        j                  t        | d«      «      S )zHExtract the raw pointer from a PyCapsule returned by __arrow_c_stream__.s   arrow_array_stream)r@   Úc_void_pÚ_pycapsule_get_pointer)rÔ   s    r5   Ú%_extract_arrow_stream_capsule_pointerrØ   ‰  s   € ä�?‰?Ô1°)Ð=RÓSÓTÐTr4   c                 ó4  — t        | «      rt        | |«      S t        | «      rt        j                  | |¬«      S t        | t        «      r+t        | j                  «       t        | j                  |«      S t        dt        | «      j                  › d|› d�«      ‚)z Convert data to numpy 2-D array.rÆ   rÇ   rÈ   zA.
It should be list of lists, numpy 2-D array or pandas DataFrame)rÏ   r³   rÑ   rR   r®   r¥   r   rÉ   rË   Úvaluesr~   rÌ   r/   ©r[   rO   rÄ   s      r5   Ú_data_to_2d_numpyrÜ   Ž  sŠ   € ô ˜$ÔÜ)¨$°Ó6Ð6Ü�4ÔÜ�x‰x˜ EÔ*Ð*Ü�$œÔ%Ü$ T§[¡[Ô1Ü)¨$¯+©+°uÓ=Ð=Ü
Ø
”d˜4“j×)Ñ)Ð*¨&°°ð 7Jð 	Jóð r4   Úcptrúctypes._PointerÚlengthc                 óÒ   — t        | t        j                  t        j                  «      «      r0t        j
                  j                  | |f¬«      j                  «       S t        d«      ‚)z6Convert a ctypes float pointer array to a numpy array.©r¨   zExpected float pointer)	r¥   r@   ÚPOINTERÚc_floatrR   Ú	ctypeslibÚas_arrayr±   ÚRuntimeError©rÝ   rß   s     r5   Ú_cfloat32_array_to_numpyrè   ¡  óJ   € ä�$œŸ™¤v§~¡~Ó6Ô7Ü�|‰|×$Ñ$ T°&°Ð$Ó;×@Ñ@ÓBÐBäÐ3Ó4Ð4r4   c                 óÒ   — t        | t        j                  t        j                  «      «      r0t        j
                  j                  | |f¬«      j                  «       S t        d«      ‚)z7Convert a ctypes double pointer array to a numpy array.rá   zExpected double pointer)	r¥   r@   râ   Úc_doublerR   rä   rå   r±   ræ   rç   s     r5   Ú_cfloat64_array_to_numpyrì   ©  sJ   € ä�$œŸ™¤v§¡Ó7Ô8Ü�|‰|×$Ñ$ T°&°Ð$Ó;×@Ñ@ÓBÐBäÐ4Ó5Ð5r4   c                 óÒ   — t        | t        j                  t        j                  «      «      r0t        j
                  j                  | |f¬«      j                  «       S t        d«      ‚)ú4Convert a ctypes int pointer array to a numpy array.rá   zExpected int32 pointer)	r¥   r@   râ   rD   rR   rä   rå   r±   ræ   rç   s     r5   Ú_cint32_array_to_numpyrï   ±  ré   r4   c                 óÒ   — t        | t        j                  t        j                  «      «      r0t        j
                  j                  | |f¬«      j                  «       S t        d«      ‚)rî   rá   zExpected int64 pointer)	r¥   r@   râ   Úc_int64rR   rä   rå   r±   ræ   rç   s     r5   Ú_cint64_array_to_numpyrò   ¹  ré   r4   Ústringc                 óJ   — t        j                  | j                  d«      «      S )z$Convert a Python string to C string.r”   )r@   Úc_char_pÚencode)ró   s    r5   rE   rE   Á  s   € ä�?‰?˜6Ÿ=™=¨Ó1Ó2Ð2r4   ÚctyperÚ   c                 ó$   —  | t        |«      z  |Ž S )z"Convert a Python array to C array.©r§   )r÷   rÚ   s     r5   Ú_c_arrayrú   Æ  s   € àˆE”C˜“KÑ &Ð)Ð)r4   c                 óì   — t        | t        j                  t        j                  t        j                  f«      r| j                  «       S t        | t        j                  «      r| j                  «       S | S )z3Convert numpy classes to JSON serializable objects.)r¥   rR   ÚintegerÚfloatingÚbool_Úitemr¦   Útolistr¡   s    r5   Ú_json_default_with_numpyr  Ë  sJ   € ä�#œŸ
™
¤B§K¡K´·±Ð:Ô;Ø�x‰x‹zÐÜ	�CœŸ™Ô	$Ø�z‰z‹|Ðàˆ
r4   c                 ót   — t        | t        «      rdj                  d„ | D «       «      }d|› d�S t        | «      S )Nú,c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr9   )rs   )rº   Úvals     r5   r»   z_to_string.<locals>.<genexpr>×  s   è ø€ Ò2¨œC ŸHÑ2ùó   ‚ú[ú])r¥   rµ   r†   rs   )r6   Úval_lists     r5   Ú
_to_stringr
  Õ  s7   € Ü�!”TÔØ—8‘8Ñ2°Ô2Ó2ˆØ�8�*˜AˆÐä�1‹vˆr4   c                 óÜ  — | �| syg }| j                  «       D ]Â  \  }}t        |t        t        t        f«      st        |«      r4|j                  |› ddj                  t        t        |«      «      › �«       Œ`t        |t        t        t        f«      st        |«      r|j                  |› d|› �«       Œ�|€Œ t        d|› dt        |«      j                   › �«      ‚ dj                  |«      S )z>Convert Python dictionary to string, which is passed to C API.r„   ú=r  zUnknown type of parameter:z, got:ú )Úitemsr¥   rµ   ÚtupleÚsetrª   r‡   r†   Úmapr
  rs   r   Ú_NUMERIC_TYPESr¢   r~   rÌ   r/   )r[   ÚpairsÚkeyr  s       r5   Ú_param_dict_to_strr  Ý  sÔ   € à€|™4ØØ€EØ—J‘J“Lò Z‰ˆˆSÜ�cœD¤%¬Ð-Ô.Ô2DÀSÔ2IØ�L‰L˜C˜5  #§(¡(¬3¬z¸3Ó+?Ó"@Ð!AÐBÕCÜ˜œc¤4¬Ð8Ô9¼[ÈÔ=MØ�L‰L˜C˜5  # ˜Õ(Ø‰_ÜÐ8¸¸¸VÄDÈÃI×DVÑDVÐCWÐXÓYÐYðZð �8‰8�E‹?Ðr4   c                   ó0   — e Zd ZdZd	d„Zdedededdfd„Zy)
Ú	_TempFilez,Proxy class to workaround errors on Windows.r7   c                 ó¢   — t        dd¬«      5 }|j                  | _        t        | j                  «      | _        d d d «       | S # 1 sw Y   | S xY w)NÚlightgbm_tmp_T)ÚprefixÚdelete)r   rÄ   r   Úpath)rk   Úfs     r5   Ú	__enter__z_TempFile.__enter__ï  sF   € Ü ¸tÔDð 	(ÈØŸ™ˆDŒIÜ˜TŸY™Y›ˆDŒI÷	(ð ˆ÷	(ð ˆús   Ž,AÁAÚexc_typeÚexc_valÚexc_tbNc                 ón   — | j                   j                  «       r| j                   j                  «        y y r9   )r  Úis_fileÚunlink)rk   r  r   r!  s       r5   Ú__exit__z_TempFile.__exit__õ  s'   € Ø�9‰9×ÑÔØ�I‰I×ÑÕð r4   )r7   r  )r/   r0   r1   r2   r  r   r%  r3   r4   r5   r  r  ì  s+   „ Ù6óð ð ¨sð ¸Cð ÀDô r4   r  c                   ó   — e Zd ZdZy)r#   zCustom deprecation warning.Nr.   r3   r4   r5   r#   r#   ü  s   „ Ù%àr4   r#   c                   ó–   — e Zd ZdZedeeee   f   fd„«       Ze	dede
e   fd„«       Ze	dedee   fd„«       Ze	dede
e   fd„«       Zy)	Ú_ConfigAliasesNr7   c                  óÀ  — d} t        j                  d«      }t        j                  | «      }t        j                  t        j                  |«      «      }t        t        j                  t        j                  | «      t        j                  |«      |«      «       |j                  }|| kD  rƒt        j                  |«      }t        j                  t        j                  |«      «      }t        t        j                  t        j                  |«      t        j                  |«      |«      «       t        j                  |j                  j                  d«      d„ ¬«      S )Né   r   r”   c                 ó^   — | j                  «       D ��ci c]  \  }}||g|z   “Œ c}}S c c}}w r9   ©r  )r�   ÚkÚvs      r5   ú<lambda>z7_ConfigAliases._get_all_param_aliases.<locals>.<lambda>   s0   € Ðad×ajÑajÓal×ImÑY]ÐYZÐ\]È!ÈaÈSÐSTÉWÉ*ÓIm€ ùÓIms   ”)©Úobject_hook)r@   rñ   Úcreate_string_bufferrõ   Ú	addressofrB   r   ÚLGBM_DumpParamAliasesrF   rG   ÚjsonÚloadsr•   )Ú
buffer_lenÚtmp_out_lenÚstring_bufferÚptr_string_bufferÚ
actual_lens        r5   Ú_get_all_param_aliasesz%_ConfigAliases._get_all_param_aliases  s
  € àˆ
Ü—n‘n QÓ'ˆÜ×3Ñ3°JÓ?ˆÜ"ŸO™O¬F×,<Ñ,<¸]Ó,KÓLÐÜÜ×&Ñ&Ü—‘˜zÓ*Ü—‘˜[Ó)Ø!óô	
ð !×&Ñ&ˆ
à˜
Ò"Ü"×7Ñ7¸
ÓCˆMÜ &§¡´×0@Ñ0@ÀÓ0OÓ PÐÜÜ×*Ñ*Ü—N‘N :Ó.Ü—L‘L Ó-Ø%óôô �z‰zØ×Ñ×&Ñ& wÓ/Ñ=mô
ð 	
r4   Úargsc                 óª   — | j                   €| j                  «       | _         t        «       }|D ]"  }|j                  | j	                  |«      «       Œ$ |S r9   )Úaliasesr<  r  ÚupdateÚ
get_sorted)Úclsr=  rš   Úis       r5   Úgetz_ConfigAliases.get#  sL   € à�;‰;ÐØ×4Ñ4Ó6ˆCŒKÜ‹eˆØò 	*ˆAØ�J‰J�s—~‘~ aÓ(Õ)ð	*àˆ
r4   rÄ   c                 ó~   — | j                   €| j                  «       | _         | j                   j                  ||g«      S r9   )r?  r<  rD  )rB  rÄ   s     r5   rA  z_ConfigAliases.get_sorted,  s3   € à�;‰;ÐØ×4Ñ4Ó6ˆCŒKØ�{‰{�‰˜t d VÓ,Ð,r4   c                 óØ   — | j                   €| j                  «       | _         t        |«      }|D ]8  }| j                   j                  «       D ]  }||v sŒ|j	                  |«        Œ8 Œ: |S r9   )r?  r<  r  rÚ   r@  )rB  r=  rš   Úargr?  s        r5   Úget_by_aliasz_ConfigAliases.get_by_alias2  sm   € à�;‰;ÐØ×4Ñ4Ó6ˆCŒKÜ�$‹iˆØò 	ˆCØŸ;™;×-Ñ-Ó/ò �Ø˜'’>Ø—J‘J˜wÔ'Ùñð	ð
 ˆ
r4   )r/   r0   r1   r?  Ústaticmethodr   rs   r   r<  Úclassmethodr   rD  rA  rH  r3   r4   r5   r(  r(    sŸ   „ à€Gàð
 D¨¨d°3©i¨Ñ$8ò 
ó ð
ð8 ð˜ð   C¡ò ó ðð ð-˜cð - d¨3¡iò -ó ð-ð
 ð	 ð 	¨¨S©ò 	ó ñ	r4   r(  Úmain_param_nameÚdefault_valuec                 ó~  — t        |«      }t        j                  | «      }|D �cg c]
  }|| k7  sŒ	|‘Œ }}| |j                  «       v r|D ]  }|j	                  |d«       Œ |S |D ]  }||j                  «       v sŒ||   || <    n | |j                  «       v r|D ]  }|j	                  |d«       Œ |S ||| <   |S c c}w )aš  Get a single parameter value, accounting for aliases.

    Parameters
    ----------
    main_param_name : str
        Name of the main parameter to get a value for. One of the keys of ``_ConfigAliases``.
    params : dict
        Dictionary of LightGBM parameters.
    default_value : Any
        Default value to use for the parameter, if none is found in ``params``.

    Returns
    -------
    params : dict
        A ``params`` dict with exactly one value for ``main_param_name``, and all aliases ``main_param_name`` removed.
        If both ``main_param_name`` and one or more aliases for it are found, the value of ``main_param_name`` will be preferred.
    N)r   r(  rA  ÚkeysÚpop)rK  r>   rL  r?  ÚaÚparams         r5   Ú_choose_param_valuerR  ?  sâ   € ô& �fÓ€Fä×'Ñ'¨Ó8€GØ!Ö:�Q Q¨/Ó%9ŠqÐ:€GÐ:ð ˜&Ÿ+™+›-Ñ'Øò 	$ˆEØ�J‰J�u˜dÕ#ð	$àˆð ò ˆØ�F—K‘K“MÒ!Ø&,¨U¡mˆF�?Ñ#Ùðð
 ˜&Ÿ+™+›-Ñ'Øò 	$ˆEØ�J‰J�u˜dÕ#ð	$àˆð ,€Fˆ?Ñà€Mùò- ;s
   ¥
B:°B:iÿÿÿr¬   rn   )ÚlabelÚweightÚ
init_scoreÚgroupÚposition)ÚsplitÚgainc                 óî   — t        | t        j                  «      rZt        | j                  t        j                  «      r6| j                  j
                  s t        d«       t        j                  | «      S | S )z2Fix the memory of multi-dimensional sliced object.zsUsage of np.ndarray subset (sliced data) is not recommended due to it will double the peak memory cost in LightGBM.)r¥   rR   r¦   ÚbaserU   Úc_contiguousr�   r±   r©   s    r5   Ú_convert_from_sliced_objectr]  ˜  sQ   € ä�$œŸ
™
Ô#¬
°4·9±9¼b¿j¹jÔ(IØ�z‰z×&Ò&ÜðJôô —7‘7˜4“=Ð Ø€Kr4   c                 óž  — t        | «      rt        j                  | «      } t        | «      rüt	        | «      } | j
                  j                  sJ ‚| j                  t        j                  k(  rC| j                  j                  t        j                  t        j                  «      «      }t        }n›| j                  t        j                  k(  rC| j                  j                  t        j                  t        j                  «      «      }t         }n;t#        d| j                  › d�«      ‚t#        dt%        | «      j&                  › d�«      ‚||| fS )z(Get pointer of float numpy array / list.z,Expected np.float32 or np.float64, met type(ú)úUnknown type()r¶   rR   rX   rª   r]  rU   r\  rO   rS   r@   Údata_asrâ   rã   Ú_C_API_DTYPE_FLOAT32rT   rë   Ú_C_API_DTYPE_FLOAT64r~   rÌ   r/   ©r[   Úptr_dataÚ	type_datas      r5   Ú_c_float_arrayrg  ¤  sï   € ä�4ÔÜ�z‰z˜$ÓˆÜ˜$ÔÜ*¨4Ó0ˆØ�z‰z×&Ò&Ð&Ð&à�:‰:œŸ™Ò#Ø—{‘{×*Ñ*¬6¯>©>¼&¿.¹.Ó+IÓJˆHÜ,‰IØ�Z‰Zœ2Ÿ:™:Ò%Ø—{‘{×*Ñ*¬6¯>©>¼&¿/¹/Ó+JÓKˆHÜ,‰IäÐJÈ4Ï:É:È,ÐVWÐXÓYÐYä˜-¬¨T«
×(;Ñ(;Ð'<¸AÐ>Ó?Ð?Ø�i Ð&Ð&r4   c                 óž  — t        | «      rt        j                  | «      } t        | «      rüt	        | «      } | j
                  j                  sJ ‚| j                  t        j                  k(  rC| j                  j                  t        j                  t        j                  «      «      }t        }n›| j                  t        j                  k(  rC| j                  j                  t        j                  t        j                  «      «      }t         }n;t#        d| j                  › d�«      ‚t#        dt%        | «      j&                  › d�«      ‚||| fS )z&Get pointer of int numpy array / list.z(Expected np.int32 or np.int64, met type(r_  r`  )r¶   rR   rX   rª   r]  rU   r\  rO   Úint32r@   ra  râ   rD   Ú_C_API_DTYPE_INT32Úint64rñ   Ú_C_API_DTYPE_INT64r~   rÌ   r/   rd  s      r5   Ú_c_int_arrayrm  ¹  sï   € ä�4ÔÜ�z‰z˜$ÓˆÜ˜$ÔÜ*¨4Ó0ˆØ�z‰z×&Ò&Ð&Ð&à�:‰:œŸ™Ò!Ø—{‘{×*Ñ*¬6¯>©>¼&¿.¹.Ó+IÓJˆHÜ*‰IØ�Z‰Zœ2Ÿ8™8Ò#Ø—{‘{×*Ñ*¬6¯>©>¼&¿.¹.Ó+IÓJˆHÜ*‰IäÐFÀtÇzÁzÀlÐRSÐTÓUÐUä˜-¬¨T«
×(;Ñ(;Ð'<¸AÐ>Ó?Ð?Ø�i Ð&Ð&r4   c                 óæ   — t        t        dt        d «      «      }t        | t        j                  t        j
                  t        j                  f«      xr t        | t        j                  |f«       S )NÚfloat128)ry   rR   rÌ   Ú
issubclassrü   rý   rþ   Útimedelta64)rO   ro  s     r5   Ú_is_allowed_numpy_dtyperr  Î  sQ   € Ü”r˜:¤t¨D£zÓ2€HÜ�eœbŸj™j¬"¯+©+´r·x±xÐ@ÓAÒwÌ*ÐUZÔ]_×]kÑ]kÐmuÐ\vÓJwÐFwÐwr4   Úpandas_dtypes_seriesc                 óÆ   — | j                  «       D ��cg c]!  \  }}t        |j                  «      s|› d|› �‘Œ# }}}|rt        ddj	                  |«      › �«      ‚y c c}}w )Nz: zIpandas dtypes must be int, float or bool.
Fields with bad pandas dtypes: z, )r  rr  rÌ   r    r†   )rs  Úcolumn_nameÚpandas_dtypeÚbad_pandas_dtypess       r5   rÉ   rÉ   Ó  s|   € ð *>×)CÑ)CÓ)E÷á%ˆK˜Ü& |×'8Ñ'8Ô9ð ˆ-�r˜,˜Ò(ðÐñ ñ
 ÜØXÐY]×YbÑYbÐctÓYuÐXvÐwó
ð 	
ð ùós   ”&AÚtarget_dtypec                 ó  — t        | j                  «       	 | j                  |d¬«      S # t        $ r  | j	                  |d¬«      j
                  cY S t        $ r$ | j                  |t        j                  ¬«      cY S w xY w)NFr°   ©r±   )rO   Úna_value)	rÉ   rË   Úto_numpyr~   r²   rÚ   r    rR   Únan)r[   rx  s     r5   Ú_pandas_to_numpyr~  ß  st   € ô ! §¡Ô-ð	Bà�}‰} <°eˆ}Ó<Ð<øÜò <ð �{‰{˜<¨eˆ{Ó4×;Ñ;Ò;Üò Bà�}‰} <¼"¿&¹&ˆ}ÓAÒAðBús   —* ª&A>Á)A>Á=A>Úfeature_nameÚcategorical_featureÚpandas_categoricalc                 ó¬  — t        | j                  «      dk7  s| j                  d   dk  rt        d«      ‚| j                  d¬«      } |dk(  r"| j                  D �cg c]  }t        |«      ‘Œ }}t        | j                  | j                  d¬	«      D ��cg c]  \  }}t        |t        «      sŒ|‘Œ }}}|D �cg c]  }| |   j                  j                  rŒ|‘Œ  }}|€0|D �cg c]$  }t        | |   j                  j                  «      ‘Œ& }}nˆt        |«      t        |«      k7  rt        d
«      ‚t        ||d¬	«      D ]U  \  }}t        | |   j                  j                  «      t        |«      k7  sŒ5| |   j                  j                  |«      | |<   ŒW |r7| |   j                  d„ «      j!                  dt"        j$                  i«      | |<   |dk(  r|}| j                  D �cg c]  }|j&                  ‘Œ }	}|	j)                  t"        j*                  «       t#        j,                  |	Ž }
t/        | |
¬«      |||fS c c}w c c}}w c c}w c c}w c c}w )Nr¬   r   r   z/Input data must be 2 dimensional and non empty.F)ÚdeepÚautoT©Ústrictz9train and valid dataset categorical_feature do not match.c                 ó.   — | j                   j                  S r9   )ÚcatÚcodesr;   s    r5   r/  z#_data_from_pandas.<locals>.<lambda>  s   € ¸¿¹¿¹€ r4   éÿÿÿÿ©rx  )r§   r¨   r    r±   Úcolumnsrs   ÚziprË   r¥   r   rˆ  Úorderedrµ   Ú
categoriesÚset_categoriesÚapplyÚreplacerR   r}  rÌ   r‡   rS   Úresult_typer~  )r[   r  r€  r�  ÚcolrO   Úcat_colsÚcat_cols_not_orderedÚcategoryÚ	df_dtypesrx  s              r5   Ú_data_from_pandasr™  ð  s#  € ô ˆ4�:‰:ƒ˜!Ò˜tŸz™z¨!™}¨qÒ0ÜÐJÓKÐKð �9‰9˜%ˆ9Ó €Dð �vÒØ,0¯L©LÖ9 Sœ˜C�Ð9ˆÐ9ô " $§,¡,°·±ÀDÔI÷Ù��UÌZÐX]Ô_rÕMsŠð€Hñ ð 7?Ö&\¨sÀdÈ3ÁiÇmÁm×F[ÓF[¢sÐ&\ÐÐ&\ØÐ!ØHPÖQÀœd 4¨¡9§=¡=×#;Ñ#;Õ<ÐQÐÑQäˆx‹=œCÐ 2Ó3Ò3ÜÐXÓYÐYÜ  Ð+=ÀdÔKò 	C‰MˆC�Ü�D˜‘I—M‘M×,Ñ,Ó-´°h³Ó?Ø  ™IŸM™M×8Ñ8¸ÓB��S’	ð	Cñ Ø˜h™×-Ñ-Ñ.CÓD×LÑLÈbÔRT×RXÑRXÈ\ÓZˆˆX‰ð ˜fÒ$Ø2Ðà)-¯©Ö5 �—“Ð5€IÐ5à×Ñ”R—Z‘ZÔ Ü—>‘> 9Ð-€Lô 	˜¨LÔ9ØØØð	ð ùò7 :ùóùò ']ùâQùò 6s*   ÁH<ÂIÂ-IÂ8IÃIÃ#)IÇ%IÚ	file_namec                 ó¶   — t        j                  | t        ¬«      }d|› d�}|�(t        |d«      5 }|j	                  |«       d d d «       |S |S # 1 sw Y   |S xY w)N©Údefaultz
pandas_categorical:ú
rP  )r5  Údumpsr  ÚopenÚwrite)r�  rš  Úcategorical_jsonÚ
pandas_strr  s        r5   Ú_dump_pandas_categoricalr¤  "  sf   € ô —z‘zÐ"4Ô>VÔWÐØ(Ð)9Ð(:¸"Ð=€JØÐÜ�)˜SÓ!ð 	  QØ�G‰G�JÔ÷	 àÐˆ:Ð÷	 àÐús   °AÁAÚ	model_strc                 óp  — d}t        |«       }| �Àt        | «       }t        | d«      5 }	 t        ||«      }|j	                  |t
        «       |j                  «       }t        |«      dk\  rn|dz  }ŒG	 d d d «       d   j                  d«      j                  «       }|j                  |«      sK|d   j                  d«      j                  «       }n(|�&|j                  dd|«      }||d  j                  «       }j                  |«      r!t        j                  |t        |«      d  «      S y # 1 sw Y   ŒºxY w)	Nzpandas_categorical:Úrbr¬   rŠ  r”   éþÿÿÿrž  r   )r§   r   r   ÚmaxÚseekr	   Ú	readlinesr•   r…   Ú
startswithÚrfindr5  r6  )	rš  r¥  Ú
pandas_keyÚoffsetÚ
max_offsetr  ÚlinesÚ	last_lineÚidxs	            r5   Ú_load_pandas_categoricalr´  .  s4  € ð '€JÜ�*‹oÐ€FØÐÜ˜iÓ(Ð(ˆ
Ü�)˜TÓ"ð 	 aØÜ˜V ZÓ0�Ø—‘�vœxÔ(ØŸ™›�Ü�u“: ’?ØØ˜!‘�ð ð
 ÷	ð ˜"‘I×$Ñ$ WÓ-×3Ñ3Ó5ˆ	Ø×#Ñ# JÔ/Ø˜b™	×(Ñ(¨Ó1×7Ñ7Ó9‰IØ	Ð	Ø�o‰o˜d A vÓ.ˆØ˜c˜d�O×)Ñ)Ó+ˆ	Ø×Ñ˜JÔ'Ü�z‰z˜)¤C¨
£OÐ$5Ð6Ó7Ð7à÷#	ð 	ús   ©A	D,Ä,D5c                   ó’   — e Zd ZdZdZej                  deee	e
e   f   dej                  fd„«       Zej                  defd„«       Zy)r&   aö  
    Generic data access interface.

    Object should support the following operations:

    .. code-block::

        # Get total row number.
        >>> len(seq)
        # Random access by row index. Used for data sampling.
        >>> seq[10]
        # Range data access. Used to read data in batch when constructing Dataset.
        >>> seq[0:100]
        # Optionally specify batch_size to control range data read size.
        >>> seq.batch_size

    - With random access, **data sampling does not need to go through all data**.
    - With range data access, there's **no need to read all data into memory thus reduce memory usage**.

    .. versionadded:: 3.3.0

    Attributes
    ----------
    batch_size : int
        Default size of a batch.
    i   r³  r7   c                 ó   — t        d«      ‚)a˜  Return data for given row index.

        A basic implementation should look like this:

        .. code-block:: python

            if isinstance(idx, numbers.Integral):
                return self._get_one_line(idx)
            elif isinstance(idx, slice):
                return np.stack([self._get_one_line(i) for i in range(idx.start, idx.stop)])
            elif isinstance(idx, list):
                # Only required if using ``Dataset.subset()``.
                return np.array([self._get_one_line(i) for i in idx])
            else:
                raise TypeError(f"Sequence index must be integer, slice or list, got {type(idx).__name__}")

        Parameters
        ----------
        idx : int, slice[int], list[int]
            Item index.

        Returns
        -------
        result : numpy 1-D array or numpy 2-D array
            1-D array if idx is int, 2-D array if idx is slice or list.
        z=Sub-classes of lightgbm.Sequence must implement __getitem__()©ÚNotImplementedError)rk   r³  s     r5   Ú__getitem__zSequence.__getitem__h  s   € ô8 "Ð"aÓbÐbr4   c                 ó   — t        d«      ‚)z"Return row count of this sequence.z9Sub-classes of lightgbm.Sequence must implement __len__()r·  ©rk   s    r5   Ú__len__zSequence.__len__†  s   € ô "Ð"]Ó^Ð^r4   N)r/   r0   r1   r2   Ú
batch_sizeÚabcÚabstractmethodr   ÚintÚslicer   rR   r¦   r¹  r¼  r3   r4   r5   r&   r&   J  sp   „ ñð6 €Jà×Ñðc˜u S¨%°°c±Ð%:Ñ;ð cÀÇ
Á
ò có ðcð: 	×Ñð_˜ò _ó ñ_r4   c                   ót  — e Zd ZdZdedeee      deee	f   de
fd„Zedddeee	f   d	d fd
„«       Zedeeef   deee	f   d	d fd„«       Zd3d„Zd	eee	f   fd„Z	 	 	 	 	 	 	 d4dededede
de
de
de
de
d	efd„Zdedededed	ef
d„Zdej2                  dedededeej2                     d	eej2                  ef   fd„Zdej2                  dededed	eej2                  ef   f
d„Zd eej<                  j>                  ej<                  j@                  f   d!ej2                  d"d#d$d#d%d#d&ed'ed(e
d	e!fd)„Z"d*ej<                  j@                  dedededeej2                     d	eej2                  ef   fd+„Z#d*ej<                  j@                  dededed	ee!ef   f
d,„Z$d*ej<                  j@                  dededed	ee!ef   f
d-„Z%d.ej<                  j>                  dededed	ee!ef   f
d/„Z&d.ej<                  j>                  dededed	ee!ef   f
d0„Z'de(jR                  dededed	eej2                  ef   f
d1„Z*d	efd2„Z+y)5Ú_InnerPredictorzÙ_InnerPredictor of LightGBM.

    Not exposed to user.
    Used only for prediction, usually used for continued training.

    .. note::

        Can be converted from Booster, but cannot be converted to Booster.
    Úbooster_handler�  Úpred_parameterÚmanage_handlec                 ó  — || _         || _        || _        t        |«      | _        t        j                  d«      }t        t        j                  | j                   t        j                  |«      «      «       |j                  | _        y)aX  Initialize the _InnerPredictor.

        Parameters
        ----------
        booster_handle : object
            Handle of Booster.
        pandas_categorical : list of list, or None
            If provided, list of categories for ``pandas`` categorical columns.
            Where the ``i``th element of the list contains the categories for the ``i``th categorical feature.
        pred_parameter : dict
            Other parameters for the prediction.
        manage_handle : bool
            If ``True``, free the corresponding Booster on the C++ side when this Python object is deleted.
        r   N)Ú_handleÚ!_InnerPredictor__is_manage_handler�  r  rÅ  r@   rA   rB   r   ÚLGBM_BoosterGetNumClassesrF   rG   Ú	num_class)rk   rÄ  r�  rÅ  rÆ  Úout_num_classs         r5   Ú__init__z_InnerPredictor.__init__—  sm   € ð* &ˆŒØ"/ˆÔØ"4ˆÔÜ0°Ó@ˆÔäŸ™ Q›ˆÜÜ×*Ñ*Ø—‘Ü—‘˜]Ó+óô	
ð '×,Ñ,ˆ�r4   Úboosterr!   r7   c                 óä   — t        j                  d«      }t        t        j                  |j
                  t        j                  |«      «      «        | |j
                  |j                  |d¬«      S )zãInitialize an ``_InnerPredictor`` from a ``Booster``.

        Parameters
        ----------
        booster : Booster
            Booster.
        pred_parameter : dict
            Other parameters for the prediction.
        r   F©rÄ  r�  rÅ  rÆ  )r@   rA   rB   r   ÚLGBM_BoosterGetCurrentIterationrÈ  rF   r�  )rB  rÎ  rÅ  Úout_cur_iters       r5   Úfrom_boosterz_InnerPredictor.from_boosterº  s_   € ô —|‘| A“ˆÜÜ×0Ñ0Ø—‘Ü—‘˜\Ó*óô	
ñ Ø"Ÿ?™?Ø&×9Ñ9Ø)Øô	
ð 	
r4   Ú
model_filec           	      ó0  — t        j                  «       }t        j                  d«      }t        t	        j
                  t        t        |«      «      t        j                  |«      t        j                  |«      «      «        | |t        |¬«      |d¬«      S )a  Initialize an ``_InnerPredictor`` from a text file containing a LightGBM model.

        Parameters
        ----------
        model_file : str or pathlib.Path
            Path to the model file.
        pred_parameter : dict
            Other parameters for the prediction.
        r   ©rš  TrÐ  )
r@   rÖ   rA   rB   r   ÚLGBM_BoosterCreateFromModelfilerE   rs   rF   r´  )rB  rÔ  rÅ  rÄ  Úout_num_iterationss        r5   Úfrom_model_filez_InnerPredictor.from_model_file×  sy   € ô  Ÿ™Ó*ˆÜ#Ÿ\™\¨!›_ÐÜÜ×0Ñ0Ü”s˜:“Ó'Ü—‘Ð/Ó0Ü—‘˜^Ó,óô	
ñ Ø)Ü7À*ÔMØ)Øô	
ð 	
r4   Nc                 óŽ   — 	 | j                   r)t        t        j                  | j                  «      «       y y # t
        $ r Y y w xY wr9   )rÉ  rB   r   ÚLGBM_BoosterFreerÈ  ÚAttributeErrorr»  s    r5   Ú__del__z_InnerPredictor.__del__ö  s>   € ð	Ø×&Ò&Üœ4×0Ñ0°·±Ó>Õ?ð 'øäò 	Ùð	ús   ‚48 ¸	AÁAc                 ó‚   — | j                   j                  «       }|j                  dd «       |j                  dd «       |S )NÚhandlerÈ  )Ú__dict__r±   rO  )rk   Úthiss     r5   Ú__getstate__z_InnerPredictor.__getstate__ý  s5   € Ø�}‰}×!Ñ!Ó#ˆØ�‰�˜4Ô Ø�‰�˜DÔ!Øˆr4   r[   Ústart_iterationÚnum_iterationÚ	raw_scoreÚ	pred_leafÚpred_contribÚdata_has_headerÚvalidate_featuresc	                 ót	  — t        |t        «      rt        d«      ‚t        |t        «      r¬|rª|j                  D �	cg c]  }	t        |	«      ‘Œ }
}	t        j                  t        |
«      z  «       }|
D �	cg c]  }	|	j                  d«      ‘Œ c}	|dd t        t        j                  | j                  |t        j                  t        |
«      «      «      «       t        |t        «      rt        |dd| j                   ¬«      d   }t"        }|rt$        }|rt&        }|rt(        }t        |t
        t*        f«      �rt-        «       5 }t        t        j.                  | j                  t1        t        |«      «      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t1        | j2                  «      t1        |j4                  «      «      «       t7        j8                  |j4                  t6        j:                  ¬«      }|j<                  d   }ddd«       �nqt        |t>        j@                  jB                  «      r| jE                  ||||¬«      \  }}�n3t        |t>        j@                  jF                  «      r| jI                  ||||¬	«      \  }}nöt        |t6        jJ                  «      r| jM                  ||||¬
«      \  }}nÃtO        jP                  |«      r,| jS                  tU        jV                  |«      |||¬«      \  }}n‚t        |tX        «      r/	 t7        jZ                  |«      }| jM                  ||||¬
«      \  }}nC	 ta        d«       t>        j@                  jC                  |«      }| jE                  ||||¬«      \  }}|rjg                  t6        jh                  «      }t        tX        t>        j@                  jj                  f«      }|sU|jl                  k7  s|s|rB|jl                  |z  dk(  r|jo                  |d«      }|S t_        d|jl                  › d|› d�«      ‚|S c c}	w c c}	w # 1 sw Y   Œ·xY w# t\        $ r}t_        d«      |‚d}~ww xY w# t\        $ r'}t        dtc        |«      jd                  › �«      |‚d}~ww xY w)aU  Predict logic.

        Parameters
        ----------
        data : str, pathlib.Path, numpy array, pandas DataFrame, scipy.sparse, pyarrow Table or polars DataFrame
            Data source for prediction.
            If str or pathlib.Path, it represents the path to a text file (CSV, TSV, or LibSVM).

        .. versionadded:: 4.2.0
            Support for ``pyarrow`` inputs

        .. versionadded:: 4.7.0
            Support for ``polars`` inputs

        start_iteration : int, optional (default=0)
            Start index of the iteration to predict.
        num_iteration : int, optional (default=-1)
            Iteration used for prediction.
        raw_score : bool, optional (default=False)
            Whether to predict raw scores.
        pred_leaf : bool, optional (default=False)
            Whether to predict leaf index.
        pred_contrib : bool, optional (default=False)
            Whether to predict feature contributions.
        data_has_header : bool, optional (default=False)
            Whether data has header.
            Used only for txt data.
        validate_features : bool, optional (default=False)
            If True, ensure that the features used to predict match the ones used to train.
            Used only if data is pandas DataFrame.

            .. versionadded:: 4.0.0

        Returns
        -------
        result : numpy array, scipy.sparse or list of scipy.sparse
            Prediction result.
            Can be sparse or a list of sparse objects (each element represents predictions for one class) for feature contributions (when ``pred_contrib=True``).
        zGCannot use Dataset instance for prediction, please use raw data insteadr”   Nr„  ©r[   r  r€  r�  r   rÆ   ©Úcsrrã  rä  Úpredict_type©Úcscrã  rä  rî  )rJ   rã  rä  rî  )r[   rã  rä  rî  z(Cannot convert data list to numpy array.z'Converting data to scipy sparse matrix.zCannot predict data for type rŠ  zLength of predict result (z) cannot be divide nrow (r_  )8r¥   r"   r~   r   rŒ  rs   r@   rõ   r§   rö   rB   r   Ú LGBM_BoosterValidateFeatureNamesrÈ  rA   r™  r�  Ú_C_API_PREDICT_NORMALÚ_C_API_PREDICT_RAW_SCOREÚ_C_API_PREDICT_LEAF_INDEXÚ_C_API_PREDICT_CONTRIBr   r  ÚLGBM_BoosterPredictForFilerE   rÅ  rÄ   rR   ÚloadtxtrT   r¨   ÚscipyÚsparseÚ
csr_matrixÚ_InnerPredictor__pred_for_csrÚ
csc_matrixÚ_InnerPredictor__pred_for_cscr¦   Ú_InnerPredictor__pred_for_np2dÚnwdÚis_into_dataframeÚ"_InnerPredictor__pred_for_narwhalsÚnwÚfrom_nativerµ   r®   ÚBaseExceptionr    r�   rÌ   r/   r²   ri  ÚspmatrixÚsizeÚreshape)rk   r[   rã  rä  rå  ræ  rç  rè  ré  r6   Ú
data_namesÚ	ptr_namesrî  r  ÚpredsÚnrowÚerrrí  Ú	is_sparses                      r5   Úpredictz_InnerPredictor.predict  s-  € ôd �dœGÔ$ÜÐeÓfÐfÜ�dœLÔ)Ñ.?Ø*.¯,©,Ö7 Qœ#˜a�&Ð7ˆJÐ7ÜŸ™¬3¨z«?Ñ:Ó=ˆIØ7AÖB°!˜AŸH™H WÕ-ÒBˆI‘aˆLÜÜ×5Ñ5Ø—L‘LØÜ—L‘L¤ Z£Ó1óôô �dœLÔ)Ü$ØØ#Ø$*Ø#'×#:Ñ#:ô	ð
 ñˆDô -ˆÙÜ3ˆLÙÜ4ˆLÙÜ1ˆLä�dœS¤$˜KÕ(Ü“ð & ÜÜ×3Ñ3ØŸ™Üœs 4›yÓ)ÜŸ™ _Ó5ÜŸ™ \Ó2ÜŸ™ _Ó5ÜŸ™ ]Ó3Ü˜t×2Ñ2Ó3Ü˜qŸv™v›ó	ôô Ÿ
™
 1§6¡6´·±Ô<�Ø—{‘{ 1‘~�÷&ñ &ô ˜œeŸl™l×5Ñ5Ô6à×-Ñ-ØØ /Ø+Ø)ð	 .ó ‰KˆE’4ô ˜œeŸl™l×5Ñ5Ô6à×-Ñ-ØØ /Ø+Ø)ð	 .ó ‰KˆE‘4ô ˜œbŸj™jÔ)Ø×.Ñ.ØØ /Ø+Ø)ð	 /ó ‰KˆE‘4ô ×"Ñ" 4Ô(Ø×2Ñ2Ü—^‘^ DÓ)Ø /Ø+Ø)ð	 3ó ‰KˆE‘4ô ˜œdÔ#ðVÜ—x‘x “~�ð ×.Ñ.ØØ /Ø+Ø)ð	 /ó ‰KˆE‘4ð`ÜÐFÔGÜ—l‘l×-Ñ-¨dÓ3�ð ×-Ñ-ØØ /Ø+Ø)ð	 .ó ‰KˆE�4ñ Ø—L‘L¤§¡Ó*ˆEÜ˜u¤t¬U¯\©\×-BÑ-BÐ&CÓDˆ	Ù˜eŸj™j¨DÒ0±IÁØ�z‰z˜DÑ  AÒ%ØŸ™ d¨BÓ/�ð ˆô !Ð#=¸e¿j¹j¸\ÐIbÐcgÐbhÐhiÐ!jÓkÐkØˆùòS 8ùâB÷4&ð &ûô` !ò VÜ Ð!KÓLÐRUÐUûðVûô !ò `ÜÐ"?ÄÀTÃ
×@SÑ@SÐ?TÐ UÓVÐ\_Ð_ûð`úsH   ¼QÁ4QÅC2QÌ?Q* Í.*R ÑQ'Ñ*	RÑ3Q?Ñ?RÒ	R7Ò"R2Ò2R7r  rî  c                ó”  — |t         kD  rt        dt         › d�«      ‚t        j                  d«      }t	        t        j                  | j                  t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      «      «       |j                  S )zGet size of prediction result.zXLightGBM cannot perform prediction for data with number of rows greater than MAX_INT32 (zP).
You can split your data into chunks and then concatenate predictions for themr   )Ú
_MAX_INT32r$   r@   rñ   rB   r   ÚLGBM_BoosterCalcNumPredictrÈ  rA   rF   rG   )rk   rã  rä  r  rî  Ún_predss         r5   Ú__get_num_predsz_InnerPredictor.__get_num_preds£  s£   € ð ”*ÒÜð?Ü?I¸lð K<ð<óð ô —.‘. Ó#ˆÜÜ×+Ñ+Ø—‘Ü—‘˜TÓ"Ü—‘˜\Ó*Ü—‘˜_Ó-Ü—‘˜]Ó+Ü—‘˜WÓ%óô		
ð �}‰}Ðr4   rJ   r
  c                 ó  — t        |«      \  }}t        |«      \  }}	}
| j                  |||j                  d   |¬«      }|€&t	        j
                  |t        j                  ¬«      }n1t        |j                  «      dk7  st        |«      |k7  rt        d«      ‚t        j                  d«      }t        t        j                  | j                  |t        j                  |	«      t        j                   |j                  d   «      t        j                   |j                  d   «      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t#        | j$                  «      t        j&                  |«      |j                  j)                  t        j*                  t        j,                  «      «      «      «       ||j.                  k7  rt        d«      ‚||j                  d   fS )Nr   ©rã  rä  r  rî  rÆ   r   ú+Wrong length of pre-allocated predict arrayú Wrong length for predict results)r\   rg  Ú_InnerPredictor__get_num_predsr¨   rR   ÚemptyrT   r§   r    r@   rñ   rB   r   ÚLGBM_BoosterPredictForMatrÈ  rA   rD   rE   rÅ  rF   ra  râ   rë   rG   )rk   rJ   rã  rä  rî  r
  r[   rZ   re  Útype_ptr_dataÚ_r  Úout_num_predss                r5   Ú__inner_predict_np2dz$_InnerPredictor.__inner_predict_np2dÀ  s‰  € ô % SÓ)‰ˆˆfÜ%3°DÓ%9Ñ"ˆ�- Ø×&Ñ&Ø+Ø'Ø—‘˜1‘Ø%ð	 'ó 
ˆð ˆ=Ü—H‘H˜W¬B¯J©JÔ7‰EÜ�—‘Ó Ò"¤c¨%£j°GÒ&;ÜÐJÓKÐKÜŸ™ qÓ)ˆÜÜ×*Ñ*Ø—‘ØÜ—‘˜]Ó+Ü—‘˜sŸy™y¨™|Ó,Ü—‘˜sŸy™y¨™|Ó,Ü—‘˜VÓ$Ü—‘˜\Ó*Ü—‘˜_Ó-Ü—‘˜]Ó+Ü�t×*Ñ*Ó+Ü—‘˜]Ó+Ø—‘×$Ñ$¤V§^¡^´F·O±OÓ%DÓEóô	
ð  �m×)Ñ)Ò)ÜÐ?Ó@Ð@Ø�c—i‘i ‘lÐ"Ð"r4   c           
      ó  — t        |j                  «      dk7  rt        d«      ‚|j                  d   }|t        kD  �r,t	        j
                  t        |t        «      }t	        j                  dgt        |«      z   |gz   «      D �cg c]   }| j                  ||t        |«      |¬«      ‘Œ" }}t	        j                  dg|z   t        j                  ¬«      j                  «       }	t	        j                  t        |«      t        j                  ¬«      }
t!        t	        j"                  ||«      t!        |	|	dd d¬	«      d¬	«      D ]!  \  }\  }}| j%                  |||||
|| ¬
«       Œ# |
|fS | j%                  ||||d¬
«      S c c}w )zPredict for a 2-D numpy matrix.r¬   z1Input numpy.ndarray or list must be 2 dimensionalr   r  rÆ   r   NTr…  )rJ   rã  rä  rî  r
  )r§   r¨   r    r  rR   ÚarangeÚdiffrµ   r  rÀ  r®   ÚintpÚcumsumr  ÚsumrT   r�  Úarray_splitÚ#_InnerPredictor__inner_predict_np2d)rk   rJ   rã  rä  rî  r  ÚsectionsrC  r  Ún_preds_sectionsr
  ÚchunkÚstart_idx_predÚend_idx_preds                 r5   Ú__pred_for_np2dz_InnerPredictor.__pred_for_np2dé  sŠ  € ô ˆs�y‰y‹>˜QÒÜÐPÓQÐQà�y‰y˜‰|ˆØ”*ÓÜ—y‘y¤¨T´:Ó>ˆHô Ÿ™ ! ¤t¨H£~Ñ!5¸¸Ñ!>Ó?öð ð ×$Ñ$Ø$3Ø"/Ü˜Q›Ø!-ð	 %õ ðˆGð ô  "Ÿx™x¨¨¨g©¼R¿W¹WÔE×LÑLÓNÐÜ—H‘HœS ›\´·±Ô<ˆEÜ9<Ü—‘˜s HÓ-¬sÐ3CÐEUÐVWÐVXÐEYÐbfÔ/gÐptô:ò 
Ñ5�Ñ5˜¨ð ×)Ñ)ØØ$3Ø"/Ø!-Ø ¨|Ð<ð *õ ð	
ð ˜$�;Ðà×,Ñ,ØØ /Ø+Ø)Øð -ó ð ùò1s   Â%E?ÚcsÚ	out_shapeÚout_ptr_indptrrÞ   Úout_ptr_indicesÚout_ptr_dataÚindptr_typeÚ	data_typeÚis_csrc	                 óì  — |d   }	|d   }
|t         k(  rt        ||
¬«      }n"|t        k(  rt        ||
¬«      }nt	        d«      ‚|t
        k(  rt        ||	¬«      }n"|t        k(  rt        ||	¬«      }nt	        d«      ‚t        ||	¬«      }|j                  j                  d   }|s|dz  }t        j                  ||j                  d   |z  «      }g }d}|D ]À  }||j                  d   dz
     }|||d   z   ||z    }|||d   z   ||z    }||z  }|j                  d   |j                  d   dz   g}|r3|j                  t        j                  j!                  |||f|«      «       Œ�|j                  t        j                  j#                  |||f|«      «       ŒÂ t%        t'        j(                  |||t+        j,                  |«      t+        j,                  |«      «      «       t/        |«      dk(  r|d   S |S )Nr   r   rç   z'Expected int32 or int64 type for indptrz)Expected float32 or float64 type for data)rj  rï   rl  rò   r~   rb  rè   rc  rì   Úindptrr¨   rR   rX  r‡   rø  rù  rú  rü  rB   r   ÚLGBM_BoosterFreePredictSparser@   rA   r§   )rk   r-  r.  r/  r0  r1  r2  r3  r4  Údata_indices_lenÚ
indptr_lenÚ
out_indptrÚout_dataÚout_indicesÚper_class_indptr_shapeÚout_indptr_arraysÚcs_output_matricesr¯  Ú	cs_indptrÚmatrix_indptr_lenÚ
cs_indicesÚcs_dataÚcs_shapes                          r5   Ú__create_sparse_nativez&_InnerPredictor.__create_sparse_native  s  € ð % Q™<ÐØ˜q‘\ˆ
ØÔ,Ò,Ü/°^ÈJÔW‰JØÔ.Ò.Ü/°^ÈJÔW‰JäÐEÓFÐFØÔ,Ò,Ü/°\ÐJZÔ[‰HØÔ.Ò.Ü/°\ÐJZÔ[‰HäÐGÓHÐHÜ,°/ÐJZÔ[ˆà!#§¡§¡°Ñ!3ÐáØ" aÑ'Ð"ÜŸH™H Z°×1AÑ1AÀ!Ñ1DÐG]Ñ1]Ó^ÐàÐØˆØ*ò 	oˆIØ )¨)¯/©/¸!Ñ*<¸qÑ*@Ñ AÐØ$ V¨i¸©lÑ%:¸VÐFWÑ=WÐXˆJØ˜v¨	°!©Ñ4°vÐ@QÑ7QÐRˆGØÐ'Ñ'ˆFàŸ™ ™ R§X¡X¨a¡[°1¡_Ð5ˆHáØ"×)Ñ)¬%¯,©,×*AÑ*AÀ7ÈJÐXaÐBbÐdlÓ*mÕnà"×)Ñ)¬%¯,©,×*AÑ*AÀ7ÈJÐXaÐBbÐdlÓ*mÕnð	oô 	Ü×.Ñ.ØØØÜ—‘˜[Ó)Ü—‘˜YÓ'óô	
ô Ð!Ó" aÒ'Ø% aÑ(Ð(Ø!Ð!r4   rí  c                 ó”  — t        |j                  «      dz
  }| j                  ||||¬«      }|€&t        j                  |t        j
                  ¬«      }n1t        |j                  «      dk7  st        |«      |k7  rt        d«      ‚t        j                  d«      }t        |j                  «      \  }	}
}t        |j                  «      \  }}}|j                  d   t        k  sJ ‚|j                  j                  t        j                   d¬«      }t#        t%        j&                  | j(                  |	t        j*                  |
«      |j                  j-                  t        j.                  t        j0                  «      «      |t        j*                  |«      t        j                  t        |j                  «      «      t        j                  t        |j                  «      «      t        j                  |j                  d   «      t        j*                  |«      t        j*                  |«      t        j*                  |«      t3        | j4                  «      t        j6                  |«      |j                  j-                  t        j.                  t        j8                  «      «      «      «       ||j:                  k7  rt        d«      ‚||fS )	Nr   r  rÆ   r  r   Frz  r  )r§   r6  r  rR   r  rT   r¨   r    r@   rñ   rm  rg  r[   r  Úindicesr²   ri  rB   r   ÚLGBM_BoosterPredictForCSRrÈ  rA   ra  râ   rD   rE   rÅ  rF   rë   rG   )rk   rí  rã  rä  rî  r
  r  r  r  Ú
ptr_indptrÚtype_ptr_indptrr  re  r  Úcsr_indicess                  r5   Ú__inner_predict_csrz#_InnerPredictor.__inner_predict_csrV  s   € ô �3—:‘:‹ Ñ"ˆØ×&Ñ&Ø+Ø'ØØ%ð	 'ó 
ˆð ˆ=Ü—H‘H˜W¬B¯J©JÔ7‰EÜ�—‘Ó Ò"¤c¨%£j°GÒ&;ÜÐJÓKÐKÜŸ™ qÓ)ˆä)5°c·j±jÓ)AÑ&ˆ
�O QÜ%3°C·H±HÓ%=Ñ"ˆ�- à�y‰y˜‰|œzÒ)Ð)Ð)Ø—k‘k×(Ñ(¬¯©¸Ð(Ó>ˆäÜ×*Ñ*Ø—‘ØÜ—‘˜_Ó-Ø×"Ñ"×*Ñ*¬6¯>©>¼&¿.¹.Ó+IÓJØÜ—‘˜]Ó+Ü—‘œs 3§:¡:›Ó/Ü—‘œs 3§8¡8›}Ó-Ü—‘˜sŸy™y¨™|Ó,Ü—‘˜\Ó*Ü—‘˜_Ó-Ü—‘˜]Ó+Ü�t×*Ñ*Ó+Ü—‘˜]Ó+Ø—‘×$Ñ$¤V§^¡^´F·O±OÓ%DÓEóô	
ð& �m×)Ñ)Ò)ÜÐ?Ó@Ð@Ø�dˆ{Ðr4   c                 óâ  — t        |j                  «      \  }}}t        |j                  «      \  }}	}
|j                  j                  t        j                  d¬«      }t        }|t        k(  r) t        j                  t        j                  «      «       }n( t        j                  t        j                  «      «       } t        j                  t        j                  «      «       }|	t        k(  r) t        j                  t        j                  «      «       }n( t        j                  t        j                   «      «       }t        j"                  dt        j$                  ¬«      }t'        t)        j*                  | j,                  |t        j.                  |«      |j                  j1                  t        j                  t        j                  «      «      |t        j.                  |	«      t        j                  t3        |j                  «      «      t        j                  t3        |j                  «      «      t        j                  |j4                  d   «      t        j.                  |«      t        j.                  |«      t        j.                  |«      t7        | j8                  «      t        j.                  |«      |j                  j1                  t        j                  t        j                  «      «      t        j:                  |«      t        j:                  |«      t        j:                  |«      «      «       | j=                  |||||||	d¬«      }t3        |j                  «      dz
  }||fS )NFrz  r¬   rÆ   r   T©r-  r.  r/  r0  r1  r2  r3  r4  )rm  r6  rg  r[   rG  r²   rR   ri  Ú_C_API_MATRIX_TYPE_CSRrj  r@   râ   rD   rñ   rb  rã   rë   r  rk  rB   r   ÚLGBM_BoosterPredictSparseOutputrÈ  rA   ra  r§   r¨   rE   rÅ  rF   Ú%_InnerPredictor__create_sparse_native)rk   rí  rã  rä  rî  rI  rJ  Ú__re  r  r  rK  Úmatrix_typer/  r0  r1  r.  Úmatricesr  s                      r5   Ú__inner_predict_csr_sparsez*_InnerPredictor.__inner_predict_csr_sparseˆ  sQ  € ô +7°s·z±zÓ*BÑ'ˆ
�O RÜ%3°C·H±HÓ%=Ñ"ˆ�- Ø—k‘k×(Ñ(¬¯©¸Ð(Ó>ˆÜ,ˆàÔ0Ò0Ø;œVŸ^™^¬F¯N©NÓ;Ó=‰Nà;œVŸ^™^¬F¯N©NÓ;Ó=ˆNØ8œ&Ÿ.™.¬¯©Ó8Ó:ˆàÔ0Ò0Ø9œ6Ÿ>™>¬&¯.©.Ó9Ó;‰Là:œ6Ÿ>™>¬&¯/©/Ó:Ó<ˆLÜ—H‘H˜Q¤b§h¡hÔ/ˆ	ÜÜ×0Ñ0Ø—‘ØÜ—‘˜_Ó-Ø×"Ñ"×*Ñ*¬6¯>©>¼&¿.¹.Ó+IÓJØÜ—‘˜]Ó+Ü—‘œs 3§:¡:›Ó/Ü—‘œs 3§8¡8›}Ó-Ü—‘˜sŸy™y¨™|Ó,Ü—‘˜\Ó*Ü—‘˜_Ó-Ü—‘˜]Ó+Ü�t×*Ñ*Ó+Ü—‘˜[Ó)Ø× Ñ ×(Ñ(¬¯©¼¿¹Ó)GÓHÜ—‘˜^Ó,Ü—‘˜_Ó-Ü—‘˜\Ó*ó%ô	
ð, ×.Ñ.ØØØ)Ø+Ø%Ø'Ø#Øð /ó 	
ˆô �3—:‘:‹ Ñ"ˆØ˜ˆ~Ðr4   c           
      ó  — |t         k(  r| j                  ||||¬«      S t        |j                  «      dz
  }|t        kD  �r-dgt        t        j                  t        |t        «      «      z   |gz   }t        j                  |«      D �cg c]   }| j                  ||t        |«      |¬«      ‘Œ" }}t        j                  dg|z   t        j                  ¬«      j                  «       }	t        j                  t        |«      t        j                   ¬«      }
t#        t#        ||dd d¬«      t#        |	|	dd d¬«      d¬«      D ]'  \  \  }}\  }}| j%                  ||| ||||
|| ¬	«       Œ) |
|fS | j%                  ||||d¬	«      S c c}w )
zPredict for a CSR data.rì  r   r   r  rÆ   NTr…  )rí  rã  rä  rî  r
  )rõ  Ú)_InnerPredictor__inner_predict_csr_sparser§   r6  r  rµ   rR   r   r!  r  rÀ  r®   r"  r#  r  r$  rT   r�  Ú"_InnerPredictor__inner_predict_csr)rk   rí  rã  rä  rî  r  r'  rC  r  r(  r
  Ú	start_idxÚend_idxr*  r+  s                  r5   Ú__pred_for_csrz_InnerPredictor.__pred_for_csrÂ  s²  € ð Ô1Ò1Ø×2Ñ2ØØ /Ø+Ø)ð	 3ó ð ô �3—:‘:‹ Ñ"ˆØ”*ÓØ�sœT¤"§)¡)¬J¸¼jÓ"IÓJÑJÈdÈVÑSˆHô Ÿ™ Ó*öð ð ×$Ñ$Ø$3Ø"/Ü˜Q›Ø!-ð	 %õ ðˆGð ô  "Ÿx™x¨¨¨g©¼R¿W¹WÔE×LÑLÓNÐÜ—H‘HœS ›\´·±Ô<ˆEÜHKÜ�H˜h q r˜l°4Ô8ÜÐ$Ð&6°q°rÐ&:À4ÔHØôIò ÑDÑ$�˜GÑ&D ~°|ð ×(Ñ(Ø˜I gÐ.Ø$3Ø"/Ø!-Ø ¨|Ð<ð )õ ðð ˜$�;Ðà×+Ñ+ØØ /Ø+Ø)Øð ,ó ð ùò5s   Â%Frð  c                 óÐ  — t        |j                  «      \  }}}t        |j                  «      \  }}	}
|j                  j                  t        j                  d¬«      }t        }|t        k(  r) t        j                  t        j                  «      «       }n( t        j                  t        j                  «      «       } t        j                  t        j                  «      «       }|	t        k(  r) t        j                  t        j                  «      «       }n( t        j                  t        j                   «      «       }t        j"                  dt        j$                  ¬«      }t'        t)        j*                  | j,                  |t        j.                  |«      |j                  j1                  t        j                  t        j                  «      «      |t        j.                  |	«      t        j                  t3        |j                  «      «      t        j                  t3        |j                  «      «      t        j                  |j4                  d   «      t        j.                  |«      t        j.                  |«      t        j.                  |«      t7        | j8                  «      t        j.                  |«      |j                  j1                  t        j                  t        j                  «      «      t        j:                  |«      t        j:                  |«      t        j:                  |«      «      «       | j=                  |||||||	d¬«      }|j4                  d   }||fS )NFrz  r¬   rÆ   r   rN  )rm  r6  rg  r[   rG  r²   rR   ri  Ú_C_API_MATRIX_TYPE_CSCrj  r@   râ   rD   rñ   rb  rã   rë   r  rk  rB   r   rP  rÈ  rA   ra  r§   r¨   rE   rÅ  rF   rQ  )rk   rð  rã  rä  rî  rI  rJ  rR  re  r  r  Úcsc_indicesrS  r/  r0  r1  r.  rT  r  s                      r5   Ú__inner_predict_sparse_cscz*_InnerPredictor.__inner_predict_sparse_csc÷  sL  € ô +7°s·z±zÓ*BÑ'ˆ
�O RÜ%3°C·H±HÓ%=Ñ"ˆ�- Ø—k‘k×(Ñ(¬¯©¸Ð(Ó>ˆÜ,ˆàÔ0Ò0Ø;œVŸ^™^¬F¯N©NÓ;Ó=‰Nà;œVŸ^™^¬F¯N©NÓ;Ó=ˆNØ8œ&Ÿ.™.¬¯©Ó8Ó:ˆàÔ0Ò0Ø9œ6Ÿ>™>¬&¯.©.Ó9Ó;‰Là:œ6Ÿ>™>¬&¯/©/Ó:Ó<ˆLÜ—H‘H˜Q¤b§h¡hÔ/ˆ	ÜÜ×0Ñ0Ø—‘ØÜ—‘˜_Ó-Ø×"Ñ"×*Ñ*¬6¯>©>¼&¿.¹.Ó+IÓJØÜ—‘˜]Ó+Ü—‘œs 3§:¡:›Ó/Ü—‘œs 3§8¡8›}Ó-Ü—‘˜sŸy™y¨™|Ó,Ü—‘˜\Ó*Ü—‘˜_Ó-Ü—‘˜]Ó+Ü�t×*Ñ*Ó+Ü—‘˜[Ó)Ø× Ñ ×(Ñ(¬¯©¼¿¹Ó)GÓHÜ—‘˜^Ó,Ü—‘˜_Ó-Ü—‘˜\Ó*ó%ô	
ð, ×.Ñ.ØØØ)Ø+Ø%Ø'Ø#Øð /ó 	
ˆð �y‰y˜‰|ˆØ˜ˆ~Ðr4   c                 ó®  — |j                   d   }|t        kD  r#| j                  |j                  «       |||¬«      S |t        k(  r| j                  ||||¬«      S | j                  ||||¬«      }t        j                  |t        j                  ¬«      }t        j                  d«      }t        |j                  «      \  }	}
}t        |j                  «      \  }}}|j                   d   t        k  sJ ‚|j                   j#                  t        j$                  d¬«      }t'        t)        j*                  | j,                  |	t        j.                  |
«      |j                  j1                  t        j2                  t        j4                  «      «      |t        j.                  |«      t        j                  t7        |j                  «      «      t        j                  t7        |j                  «      «      t        j                  |j                   d   «      t        j.                  |«      t        j.                  |«      t        j.                  |«      t9        | j:                  «      t        j<                  |«      |j                  j1                  t        j2                  t        j>                  «      «      «      «       ||j@                  k7  rtC        d«      ‚||fS )	zPredict for a CSC data.r   rì  rï  r  rÆ   Frz  r  )"r¨   r  rû  Útocsrrõ  Ú)_InnerPredictor__inner_predict_sparse_cscr  rR   r  rT   r@   rñ   rm  r6  rg  r[   rG  r²   ri  rB   r   ÚLGBM_BoosterPredictForCSCrÈ  rA   ra  râ   rD   r§   rE   rÅ  rF   rë   rG   r    )rk   rð  rã  rä  rî  r  r  r
  r  rI  rJ  rR  re  r  r  r^  s                   r5   Ú__pred_for_cscz_InnerPredictor.__pred_for_csc1  s1  € ð �y‰y˜‰|ˆØ”*ÒØ×&Ñ&Ø—I‘I“KØ /Ø+Ø)ð	 'ó ð ð Ô1Ò1Ø×2Ñ2ØØ /Ø+Ø)ð	 3ó ð ð ×&Ñ&Ø+Ø'ØØ%ð	 'ó 
ˆô —‘˜¬¯
©
Ô3ˆÜŸ™ qÓ)ˆä*6°s·z±zÓ*BÑ'ˆ
�O RÜ%3°C·H±HÓ%=Ñ"ˆ�- à�y‰y˜‰|œzÒ)Ð)Ð)Ø—k‘k×(Ñ(¬¯©¸Ð(Ó>ˆäÜ×*Ñ*Ø—‘ØÜ—‘˜_Ó-Ø×"Ñ"×*Ñ*¬6¯>©>¼&¿.¹.Ó+IÓJØÜ—‘˜]Ó+Ü—‘œs 3§:¡:›Ó/Ü—‘œs 3§8¡8›}Ó-Ü—‘˜sŸy™y¨™|Ó,Ü—‘˜\Ó*Ü—‘˜_Ó-Ü—‘˜]Ó+Ü�t×*Ñ*Ó+Ü—‘˜]Ó+Ø—‘×$Ñ$¤V§^¡^´F·O±OÓ%DÓEóô	
ð& �m×)Ñ)Ò)ÜÐ?Ó@Ð@Ø�dˆ{Ðr4   c                 óÒ  — | j                  |||j                  d   |¬«      }t        j                  |t        j                  ¬«      }t        j                  d«      }|j                  «       }t        t        j                  | j                  t        |«      t        j                  |«      t        j                  |«      t        j                  |«      t        | j                  «      t        j                   |«      |j
                  j#                  t        j$                  t
        j&                  «      «      «      «       ||j(                  k7  rt+        d«      ‚||j                  d   fS )z!Predict for a narwhals DataFrame.r   r  rÆ   r  )r  r¨   rR   r  rT   r@   rñ   Ú__arrow_c_stream__rB   r   Ú!LGBM_BoosterPredictForArrowStreamrÈ  rØ   rA   rE   rÅ  rF   ra  râ   rë   rG   r    )	rk   r[   rã  rä  rî  r  r
  r  rÔ   s	            r5   Ú__pred_for_narwhalsz#_InnerPredictor.__pred_for_narwhalsn  s  € ð ×&Ñ&Ø+Ø'Ø—‘˜A‘Ø%ð	 'ó 
ˆô —‘˜¬¯
©
Ô3ˆÜŸ™ qÓ)ˆð ×+Ñ+Ó-ˆ	ÜÜ×2Ñ2Ø—‘Ü5°iÓ@Ü—‘˜\Ó*Ü—‘˜_Ó-Ü—‘˜]Ó+Ü�t×*Ñ*Ó+Ü—‘˜]Ó+Ø—‘×$Ñ$¤V§^¡^´F·O±OÓ%DÓEó	ô	
ð �m×)Ñ)Ò)ÜÐ?Ó@Ð@Ø�d—j‘j ‘mÐ#Ð#r4   c                 ó¼   — t        j                  d«      }t        t        j                  | j
                  t        j                  |«      «      «       |j                  S ©z˜Get the index of the current iteration.

        Returns
        -------
        cur_iter : int
            The index of the current iteration.
        r   ©r@   rA   rB   r   rÑ  rÈ  rF   rG   ©rk   rÒ  s     r5   Úcurrent_iterationz!_InnerPredictor.current_iteration’  óH   € ô —|‘| A“ˆÜÜ×0Ñ0Ø—‘Ü—‘˜\Ó*óô	
ð ×!Ñ!Ð!r4   ©r7   N)r   rŠ  FFFFF),r/   r0   r1   r2   Ú_BoosterHandler   r   r   rs   r   ÚboolrÍ  rJ  rÓ  r   r   rÙ  rÝ  râ  Ú_LGBM_PredictDataTyperÀ  Ú_LGBM_PredictReturnTyper  r  rR   r¦   r   r&  rþ  rø  rù  rü  rú  Ú_LGBM_PredictSparseReturnTyperQ  rX  rW  rû  rb  rý  r  Ú	DataFramer  rm  r3   r4   r5   rÃ  rÃ  Œ  sŒ  „ ñð!-à&ð!-ð % T¨$¡ZÑ0ð!-ð ˜S #˜X™ð	!-ð
 ó!-ðF ð
àð
ð ˜S #˜X™ð
ð 
ò	
ó ð
ð8 ð
à˜#˜t˜)Ñ$ð
ð ˜S #˜X™ð
ð 
ò	
ó ð
ó<ð˜d 3¨ 8™nó ð  !ØØØØ"Ø %Ø"'ñ^à#ð^ð ð^ð ð	^ð
 ð^ð ð^ð ð^ð ð^ð  ð^ð 
!ó^ð@ð ðð ð	ð
 ðð ðð 
óð:'#à�Z‰Zð'#ð ð'#ð ð	'#ð
 ð'#ð ˜Ÿ
™
Ñ#ð'#ð 
ˆr�z‰z˜3ˆÑ	ó'#ðR-à�Z‰Zð-ð ð-ð ð	-ð
 ð-ð 
ˆr�z‰z˜3ˆÑ	ó-ð^<"à�%—,‘,×)Ñ)¨5¯<©<×+BÑ+BÐBÑCð<"ð —:‘:ð<"ð *ð	<"ð
 +ð<"ð (ð<"ð ð<"ð ð<"ð ð<"ð 
'ó<"ð|0à�\‰\×$Ñ$ð0ð ð0ð ð	0ð
 ð0ð ˜Ÿ
™
Ñ#ð0ð 
ˆr�z‰z˜3ˆÑ	ó0ðd8à�\‰\×$Ñ$ð8ð ð8ð ð	8ð
 ð8ð 
Ð,¨cÐ1Ñ	2ó8ðt3à�\‰\×$Ñ$ð3ð ð3ð ð	3ð
 ð3ð 
Ð,¨cÐ1Ñ	2ó3ðj8à�\‰\×$Ñ$ð8ð ð8ð ð	8ð
 ð8ð 
Ð,¨cÐ1Ñ	2ó8ðt;à�\‰\×$Ñ$ð;ð ð;ð ð	;ð
 ð;ð 
Ð,¨cÐ1Ñ	2ó;ðz"$à�l‰lð"$ð ð"$ð ð	"$ð
 ð"$ð 
ˆr�z‰z˜3ˆÑ	ó"$ðH" 3ô "r4   rÃ  c                   óö  — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 dTdedee   ded    dee   dee   dee	   d	e
d
edeeeef      dedee   fd„ZdUd„Zdedej*                  fd„Zdededd fd„Zdeej*                     deej*                     dededd f
d„Zdej*                  dd fd„Zdeeef   fd„ZdVd„Zdee   dedeeee   ej*                  f      dd fd„Z dee   dee   ded    dee   dee   dee	   dee   d	e
d
edeeeef      dee   dd fd„Z!e"d ee#   d!e$e   de%ej*                     fd"„«       Z&d ee#   dede'eej*                     eej*                     f   fd#„Z(d ee#   dee   dd fd$„Z)d%ej*                  d&edee   dd fd'„Z*d(eej*                     d&edee   dd fd)„Z+d*e,jZ                  j\                  d&edee   dd fd+„Z/d,e,jZ                  j`                  d&edee   dd fd-„Z1de2jf                  d&edee   dd fd.„Z4e"deeef   d/eeef   d0e5e   defd1„«       Z6dVd2„Z7	 	 	 	 	 	 dWdedee   dee   dee   dee	   deeeef      dee   dd fd3„Z8	 dXdee   deeeef      dd fd4„Z9d5eee:f   dd fd6„Z;deeeef      dd fd7„Z<dVd8„Z=d9edee>   dd fd:„Z?d9edeej*                     fd;„Z@d
edd fd<„ZAdee   dd fd=„ZBdYd>„ZCd	e
dd fd?„ZDdee   dd fd@„ZEdee   dd fdA„ZFdee	   dd fdB„ZGdee   dd fdC„ZHdee   dd fdD„ZIdee   fdE„ZJdee   fdF„ZKdee   fdG„ZLdee	   fdH„ZMdee   fdI„ZNdee   fdJ„ZOdee   fdK„ZPdefdL„ZQdefdM„ZRdNeeef   defdO„ZSdZdPede5d    fdQ„ZTd[dR„ZUd5eee:f   dd fdS„ZVy)\r"   aO  
    Dataset in LightGBM.

    LightGBM does not train on raw data.
    It discretizes continuous features into histogram bins, tries to combine categorical features,
    and automatically handles missing and infinite values.

    This class handles that preprocessing, and holds that alternative representation of the input data.
    Nr[   rS  Ú	referencerT  rV  rU  r  r€  r>   Úfree_raw_datarW  c                 ó.  — d| _         || _        || _        || _        || _        || _        || _        || _        || _        || _	        t        |	«      | _        |
| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        y)a  Initialize Dataset.

        Parameters
        ----------
        data : str, pathlib.Path, numpy array, pandas DataFrame, scipy.sparse, Sequence, list of Sequence, list of numpy array, pyarrow Table or polars DataFrame
            Data source of Dataset.
            If str or pathlib.Path, it represents the path to a text file (CSV, TSV, or LibSVM) or a LightGBM Dataset binary file.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        label : list, numpy 1-D array, pandas Series / one-column DataFrame, pyarrow ChunkedArray, polars Series or None, optional (default=None)
            Label of the data.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        reference : Dataset or None, optional (default=None)
            If this is Dataset for validation, training data should be used as reference.
        weight : list, numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None, optional (default=None)
            Weight for each instance. Weights should be non-negative.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        group : list, numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None, optional (default=None)
            Group/query data.
            Only used in the learning-to-rank task.
            sum(group) = n_samples.
            For example, if you have a 100-document dataset with ``group = [10, 20, 40, 10, 10, 10]``, that means that you have 6 groups,
            where the first 10 records are in the first group, records 11-30 are in the second group, records 31-70 are in the third group, etc.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        init_score : list, list of lists (for multi-class task), numpy array, pandas Series, pandas DataFrame (for multi-class task), pyarrow ChunkedArray, pyarrow Table (for multi-class task), polars Series, polars DataFrame (for multi-class task) or None, optional (default=None)
            Init score for Dataset.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        feature_name : list of str, or 'auto', optional (default="auto")
            Feature names.
            If 'auto' and data is pandas DataFrame, pyarrow Table, or polars DataFrame, data columns names are used.
        categorical_feature : list of str or int, or 'auto', optional (default="auto")
            Categorical features.
            If list of int, interpreted as indices.
            If list of str, interpreted as feature names (need to specify ``feature_name`` as well).
            If 'auto' and data is pandas DataFrame, pandas unordered categorical columns are used.
            All values in categorical features will be cast to int32 and thus should be less than int32 max value (2147483647).
            Large values could be memory consuming. Consider using consecutive integers starting from zero.
            All negative values in categorical features will be treated as missing values.
            The output cannot be monotonically constrained with respect to a categorical feature.
            Floating point numbers in categorical features will be rounded towards 0.
        params : dict or None, optional (default=None)
            Other parameters for Dataset.
        free_raw_data : bool, optional (default=True)
            If True, raw data is freed after constructing inner Dataset.
        position : numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None, optional (default=None)
            Position of items used in unbiased learning-to-rank task.
        NTr   F)rÈ  r[   rS  rw  rT  rV  rW  rU  r  r€  r   r>   rx  Úused_indicesÚ_need_sliceÚ
_predictorr�  Ú_params_back_upÚversionÚ
_start_rowÚ_has_non_default_feature_names)rk   r[   rS  rw  rT  rV  rU  r  r€  r>   rx  rW  s               r5   rÍ  zDataset.__init__¯  s    € ðt 26ˆŒØˆŒ	ØˆŒ
Ø"ˆŒØˆŒØˆŒ
Ø ˆŒØ$ˆŒØ<HˆÔØJ]ˆÔ Ü˜vÓ&ˆŒØ*ˆÔØ15ˆÔØˆÔØ59ˆŒØ8<ˆÔØ9=ˆÔØˆŒØˆŒð 5:ˆÕ+r4   r7   c                 óD   — 	 | j                  «        y # t        $ r Y y w xY wr9   )Ú_free_handlerÜ  r»  s    r5   rÝ  zDataset.__del__$  s%   € ð	Ø×ÑÕøÜò 	Ùð	ús   ‚ “	žr=   c          
      ó¤  — t        | j                  «       «      }t        ||«      }t        j                  |t        j
                  ¬«      }t        |«      \  }}}t        j                  d«      }t        t        j                  t        j                  |«      t        |«      |t        j                  |«      «      «       ||j                  k(  sJ ‚|S )aD  Get an array of randomly chosen indices from this ``Dataset``.

        Indices are sampled without replacement.

        Parameters
        ----------
        total_nrow : int
            Total number of rows to sample from.
            If this value is greater than the value of parameter ``bin_construct_sample_cnt``, only ``bin_construct_sample_cnt`` indices will be used.
            If Dataset has multiple input data, this should be the sum of rows of every file.

        Returns
        -------
        indices : numpy array
            Indices for sampled data.
        rÆ   r   )r  Ú
get_paramsrI   rR   r  ri  rm  r@   rD   rB   r   ÚLGBM_SampleIndicesrE   rF   rG   )rk   r=   Ú	param_strrH   rG  re  r  Úactual_sample_cnts           r5   Ú_create_sample_indiceszDataset._create_sample_indices*  sª   € ô" ' t§¡Ó'8Ó9ˆ	Ü& z°9Ó=ˆ
Ü—(‘(˜:¬R¯X©XÔ6ˆÜ% gÓ.‰ˆ�!�QÜ"ŸN™N¨1Ó-ÐäÜ×#Ñ#Ü—‘˜zÓ*Ü�yÓ!ØÜ—‘Ð.Ó/ó	ô	
ð Ð.×4Ñ4Ò4Ð4Ð4Øˆr4   Úref_datasetc           	      óØ   — t        j                  «       | _        t        t	        j
                  |t        j                  |«      t        j                  | j                  «      «      «       | S )ag  Create dataset from a reference dataset.

        Parameters
        ----------
        total_nrow : int
            Number of rows expected to add to dataset.
        ref_dataset : object
            Handle of reference dataset to extract metadata from.

        Returns
        -------
        self : Dataset
            Constructed Dataset object.
        )r@   rÖ   rÈ  rB   r   ÚLGBM_DatasetCreateByReferencerñ   rF   )rk   r=   r‰  s      r5   Ú_init_from_ref_datasetzDataset._init_from_ref_datasetL  sN   € ô& —‘Ó(ˆŒÜÜ×.Ñ.ØÜ—‘˜zÓ*Ü—‘˜TŸ\™\Ó*óô	
ð ˆr4   Úsample_dataÚsample_indicesrH   c                 óÒ  — t        |«      }t        |«      |k(  sJ d«       ‚t        |«      D ]€  }||   j                  t        j                  k7  rt        d|› d||   j                  › d�«      ‚||   j                  t        j                  k7  sŒct        d|› d||   j                  › d�«      ‚  t        j                  t        j                  «      |z  «       } t        j                  t        j                  «      |z  «       }t        |«      D ]*  }t        ||   «      d   ||<   t        ||   «      d   ||<   Œ, t        j                  |D �	cg c]  }	t        |	«      ‘Œ c}	t        j                  ¬«      }
t        |
«      \  }}}t        j                  «       | _        t!        | j#                  «       «      }t%        t'        j(                  t        j*                  |t        j                  t        j                  t        j                  «      «      «      t        j*                  |t        j                  t        j                  t        j                  «      «      «      t        j                  |«      |t        j                  |«      t        j                  |«      t        j,                  |«      t/        |«      t        j0                  | j                  «      «	      «       | S c c}	w )	aö  Create Dataset from sampled data structures.

        Parameters
        ----------
        sample_data : list of numpy array
            Sample data for each column.
        sample_indices : list of numpy array
            Sample data row index for each column.
        sample_cnt : int
            Number of samples.
        total_nrow : int
            Total number of rows for all input files.

        Returns
        -------
        self : Dataset
            Constructed Dataset object.
        z&#sample data column != #column indiceszsample_data[z] type z is not doublezsample_indices[z is not int32r   rÆ   )r§   ÚrangerO   rR   Údoubler    ri  r@   râ   rë   rD   rg  rm  r®   rÖ   rÈ  r  r„  rB   r   Ú#LGBM_DatasetCreateFromSampledColumnÚcastrñ   rE   rF   )rk   r�  rŽ  rH   r=   ÚncolrC  Úsample_col_ptrÚindices_col_ptrÚdÚnum_per_colÚnum_per_col_ptrr  Ú
params_strs                 r5   Ú_init_from_samplezDataset._init_from_samplei  sE  € ô2 �>Ó"ˆÜ�;Ó 4Ò'ÐQÐ)QÓQÐ'ä�t“ò 	eˆAØ˜1‰~×#Ñ#¤r§y¡yÒ0Ü  <°¨s°'¸+Àa¹.×:NÑ:NÐ9OÈ~Ð!^Ó_Ð_Ø˜aÑ ×&Ñ&¬"¯(©(Ó2Ü  ?°1°#°W¸^ÈAÑ=N×=TÑ=TÐ<UÐUbÐ!cÓdÐdð		eð 0V¬v¯~©~¼f¿o¹oÓ/NÐQUÑ/UÓ.Xˆð /T¬f¯n©n¼V¿^¹^Ó.LÈtÑ.SÓ-VˆÜ�t“ò 	DˆAÜ .¨{¸1©~Ó >¸qÑ AˆN˜1ÑÜ!-¨n¸QÑ.?Ó!@ÀÑ!CˆO˜AÒð	Dô —h‘h°Ö?¨1¤ A¥Ò?ÄrÇxÁxÔPˆÜ ,¨[Ó 9Ñˆ˜˜Aä—‘Ó(ˆŒÜ'¨¯©Ó(9Ó:ˆ
ÜÜ×4Ñ4Ü—‘˜N¬F¯N©N¼6¿>¹>Ì&Ï/É/Ó;ZÓ,[Ó\Ü—‘˜O¬V¯^©^¼F¿N¹NÌ6Ï>É>Ó<ZÓ-[Ó\Ü—‘˜tÓ$ØÜ—‘˜zÓ*Ü—‘˜zÓ*Ü—‘˜zÓ*Ü�zÓ"Ü—‘˜TŸ\™\Ó*ó
ô	
ð ˆùò%  @s   ÅK$c                 ó‚  — |j                   \  }}|j                  |j                  «      }t        |«      \  }}}t	        t        j                  | j                  ||t        j                  |«      t        j                  |«      t        j                  | j                  «      «      «       | xj                  |z  c_
        | S )zãAdd rows to Dataset.

        Parameters
        ----------
        data : numpy 1-D array
            New data to add to the Dataset.

        Returns
        -------
        self : Dataset
            Dataset object.
        )r¨   r  r  rg  rB   r   ÚLGBM_DatasetPushRowsrÈ  r@   rD   r  )rk   r[   r  r”  Údata_ptrr3  r  s          r5   Ú
_push_rowszDataset._push_rows©  s”   € ð —Z‘Z‰
ˆˆdØ�|‰|˜DŸI™IÓ&ˆÜ!/°Ó!5Ñˆ�)˜QäÜ×%Ñ%Ø—‘ØØÜ—‘˜tÓ$Ü—‘˜tÓ$Ü—‘˜tŸ™Ó/óô		
ð 	�Š˜4Ñ�Øˆr4   c                 óâ   — | j                   �\t        j                  ddddddddd	d
ddddddddddd«      }| j                   j                  «       D ��ci c]  \  }}||v sŒ||“Œ c}}S i S c c}}w )zŸGet the used parameters in the Dataset.

        Returns
        -------
        params : dict
            The used parameters in this Dataset object.
        Úbin_construct_sample_cntr€  Údata_random_seedÚenable_bundleÚfeature_pre_filterÚforcedbins_filenameÚgroup_columnÚheaderÚignore_columnÚis_enable_sparseÚlabel_columnÚlinear_treeÚmax_binÚmax_bin_by_featureÚmin_data_in_binÚpre_partitionÚprecise_float_parserÚ	two_roundÚuse_missingÚweight_columnÚzero_as_missing)r>   r(  rD  r  )rk   Údataset_paramsr-  r.  s       r5   r„  zDataset.get_paramsÇ  s—   € ð �;‰;Ð"ä+×/Ñ/Ø*Ø%Ø"ØØ$Ø%ØØØØ"ØØØØ$Ø!ØØ&ØØØØ!ó+ˆNð. &*§[¡[×%6Ñ%6Ó%8×P™T˜Q ¸AÀÒ<O�A�q‘DÓPÐPàˆIùó Qs   ÁA+Á A+c                 ó°   — | j                   �/t        t        j                  | j                   «      «       d | _         d| _        | j
                  �d | _        | S )NT)rÈ  rB   r   ÚLGBM_DatasetFreer{  rz  r[   r»  s    r5   r‚  zDataset._free_handleì  sJ   € Ø�<‰<Ð#Ü”t×,Ñ,¨T¯\©\Ó:Ô;ØˆDŒLØˆÔØ×ÑÐ(ØˆDŒIØˆr4   Ú	predictorrz  c                 óN  ‡ — d}t        |t        t        f«      r3‰ j                  �'t	        ˆ fd„t
        j                  d«      D «       «      }‰ j                  «       }|��u|j                  |d|¬«      }|j                  «       }|�Æ‰ j                  rJ ‚t        |t        t        f«      r¢t        j                  ||j                  z  t        j                  ¬«      }|t        |«      k(  sJ ‚t!        t        |«      «      D ]G  }t!        |j                  «      D ]-  }	|||   |j                  z  |	z      |||j                  z  |	z   <   Œ/ ŒI |}|j                  dkD  r¹t        j                  |j"                  t        j                  ¬«      }
t!        |«      D ]:  }t!        |j                  «      D ]   }	|||j                  z  |	z      |
|	|z  |z   <   Œ" Œ< |
}n?‰ j$                  �1t        j&                  ‰ j$                  dt        j                  ¬	«      }n‰ S ‰ j)                  |«       ‰ S )
NFc              3   óV   •K  — | ]   }‰j                   j                  |d «      –— Œ" y­w)FN)r>   rD  )rº   Úaliasrk   s     €r5   r»   z7Dataset._set_init_score_by_predictor.<locals>.<genexpr>þ  s    øè ø€ Ò!jÀE $§+¡+§/¡/°%¸×"?Ñ!jùs   ƒ&)r§  T)r[   rå  rè  rÆ   r   g        )Ú
fill_valuerO   )r¥   rs   r   r>   Úanyr(  rD  Únum_datar  rY   r{  rR   r  rË  rT   r§   r�  r  rU  Ú	full_likeÚset_init_score)rk   r¸  r[   rz  rè  r¾  rU  Úsub_init_scorerC  ÚjÚnew_init_scores   `          r5   Ú_set_init_score_by_predictorz$Dataset._set_init_score_by_predictorõ  s  ø€ ð  ˆÜ�dœS¤$˜KÔ(¨T¯[©[Ð-Dä!Ó!jÌ^×M_ÑM_Ð`hÓMiÔ!jÓjˆOØ—=‘=“?ˆØÑ ØCL×CTÑCTØØØ /ð DUó DˆJð
 $×)Ñ)Ó+ˆJØÐ'Ø×+Ò+Ð+Ð+Ü˜d¤S¬$ KÔ0Ü%'§X¡X¨h¸×9LÑ9LÑ.LÔTV×T^ÑT^Ô%_�NØ#¤s¨<Ó'8Ò8Ð8Ð8Ü"¤3 |Ó#4Ó5ò ˜Ü!& y×':Ñ':Ó!;ò ˜AØJTØ ,¨Q¡°)×2EÑ2EÑ EÈÑ IñK˜N¨1¨y×/BÑ/BÑ+BÀQÑ+FÒGñðð
 "0�JØ×"Ñ" QÒ&ä!#§¡¨*¯/©/ÄÇÁÔ!L�Ü˜x›ò c�AÜ" 9×#6Ñ#6Ó7ò c˜Ø;EÀaÈ)×J]ÑJ]ÑF]Ð`aÑFaÑ;b˜ q¨8¡|°aÑ'7Ò8ñcðcð ,‘
Ø�_‰_Ð(ÜŸ™ d§o¡oÀ#ÌRÏZÉZÔX‰JàˆKØ×Ñ˜JÔ'Øˆr4   c           
      óä  — |€	d | _         | S |�|j                  | _        |j                  }	t        |t        «      r#t        |||	| j                  ¬«      \  }}}	| _        t        j                  |«      r2|dk(  r-t        j                  |«      j                  j                  «       }|dk7  | _        |
€i n|
}
t        j                  | j                  j                   «      j"                  j%                  «       }|
j%                  «       D ]  }||v sŒt'        |› d|› d�«       Œ t        |	t(        «      �r#t+        «       }i }t        |t(        «      rt-        |«      D ��ci c]  \  }}||“Œ
 }}}|	D ]q  }t        |t.        «      r||v r|j1                  ||   «       Œ,t        |t2        «      r|j1                  |«       ŒNt5        dt7        |«      j8                  › d|› d�«      ‚ |rqt:        j=                  d«      D ]K  }||
v sŒt        |
|   t(        «      rt+        |
|   «      |k(  st'        |› d	�«       |
j?                  |d «       ŒM tA        |«      |
d
<   tC        |
«      }|
| _"        d }t        |tF        «      r|jI                  «       j                   }n|�t5        d«      ‚t        |t.        tJ        f«      rttM        jN                  «       | _         tQ        tS        jT                  tW        t/        |«      «      tW        |«      |tM        jX                  | j                   «      «      «       �n¡t        |tZ        j\                  j^                  «      r| ja                  |||¬«       �ngt        |tZ        j\                  jb                  «      r| je                  |||¬«       �n-t        |tf        jh                  «      r| jk                  |||¬«       nþt        j                  |«      r(| jm                  t        j                  |«      ||¬«       nÁt        |t(        «      rXto        |«      dkD  rJtq        |«      r| js                  |||¬«       nƒtu        |«      r| jw                  ||¬«       ndt5        d«      ‚t        |tx        «      r| jw                  |g|¬«       n4	 tZ        j\                  j_                  |«      }| ja                  |||¬«       |�| j}                  |«       | j                  «       €t�        d«      ‚|�| jƒ                  |«       |�| j…                  |«       |�| j‡                  |«       t        |tˆ        «      r.| jŠ                  €|�t'        d«       | j�                  ||d ¬«       n7|�| j�                  |«       n#|�!t5        dt7        |«      j8                  › �«      ‚| j‘                  |«      S c c}}w # tz        $ r'}t5        dt7        |«      j8                  › �«      |‚d }~ww xY w)Nrë  r„  zD keyword has been found in `params` and will be ignored.
Please use z< argument of the Dataset constructor to pass this parameter.rÇ   z) or unknown name(z) in categorical_featurer€  z in param dict is overridden.Úcategorical_columnz4Reference dataset should be None or dataset instance)rí  rš  r‰  )rð  rš  r‰  )rJ   rš  r‰  )r[   rš  r‰  r   )Úmatsrš  r‰  )Úseqsr‰  z,Data list can only be of ndarray or SequencezCannot initialize Dataset from zLabel should not be NonezBThe init_score will be overridden by the prediction of init_model.©r¸  r[   rz  zWrong predictor type )IrÈ  r�  r€  r¥   r   r™  rÿ  r   r  r  ÚschemaÚnamesr€  ÚinspectÚ	signatureÚ	__class__Ú
_lazy_initÚ
parametersrN  r�   rµ   r  Ú	enumeraters   ÚaddrÀ  r~   rÌ   r/   r(  rD  rO  Úsortedr  r>   r"   Ú	constructr   r@   rÖ   rB   r   ÚLGBM_DatasetCreateFromFilerE   rF   rø  rù  rú  Ú_Dataset__init_from_csrrü  Ú_Dataset__init_from_cscrR   r¦   Ú_Dataset__init_from_np2dÚ_Dataset__init_from_narwhalsr§   r¾   Ú_Dataset__init_from_list_np2drÁ   Ú_Dataset__init_from_seqsr&   r  Ú	set_labelÚ	get_labelr    Ú
set_weightÚ	set_groupÚset_positionrÃ  r|  rÄ  rÀ  Úset_feature_name)rk   r[   rS  rw  rT  rV  rU  r¸  r  r€  r>   rW  Ú
args_namesr  Úcategorical_indicesÚfeature_dictrC  rÄ   Ú	cat_aliasrš  r‰  rí  r  s                          r5   rÏ  zDataset._lazy_init   sb  € ð ˆ<ØˆDŒLØˆKØÐ Ø&/×&BÑ&BˆDÔ#Ø"+×"?Ñ"?ÐÜ�dœLÔ)ÜO`ØØ)Ø$7Ø#'×#:Ñ#:ô	PÑLˆD�,Ð 3°TÔ5Lô × Ñ  Ô&¨<¸6Ò+AÜŸ>™>¨$Ó/×6Ñ6×<Ñ<Ó>ˆLð
 /;¸fÑ.DˆÔ+ð �~‘¨6ˆÜ×&Ñ& t§~¡~×'@Ñ'@ÓA×LÑL×QÑQÓSˆ
Ø—;‘;“=ò 	ˆCØ�jÒ ÜØ�eð "Ø"% Ð&bðdõð	ô Ð)¬4Õ0Ü"%£%ÐØˆLÜ˜,¬Ô-Ü7@ÀÓ7N×O©G¨A¨t  a¡ÐO�ÑOØ+ò y�Ü˜d¤CÔ(¨T°\Ñ-AØ'×+Ñ+¨L¸Ñ,>Õ?Ü ¤cÔ*Ø'×+Ñ+¨DÕ1ä# k´$°t³*×2EÑ2EÐ1FÐFXÐY]ÐX^Ð^vÐ$wÓxÐxðyñ #Ü!/×!3Ñ!3Ð4IÓ!Jò 4�IØ  FÒ*ä *¨6°)Ñ+<¼dÔ CÌÈFÐS\ÑL]ÓH^ÐbuÒHuÜ(¨I¨;Ð6SÐ)TÔUØŸ
™
 9¨dÕ3ð4ô 06Ð6IÓ/J�Ð+Ñ,ä'¨Ó/ˆ
ØˆŒàˆÜ�i¤Ô)Ø#×-Ñ-Ó/×7Ñ7‰KØÐ"ÜÐRÓSÐSä�dœS¤$˜KÔ(Ü!Ÿ?™?Ó,ˆDŒLÜÜ×/Ñ/Üœ3˜t›9Ó%Ü˜:Ó&ØÜ—L‘L §¡Ó.ó	öô ˜œeŸl™l×5Ñ5Ô6Ø× Ñ  T°jÈkÐ ÖZÜ˜œeŸl™l×5Ñ5Ô6Ø× Ñ  T°jÈkÐ ÖZÜ˜œbŸj™jÔ)Ø×!Ñ! d°zÈ{Ð!Õ[Ü×"Ñ" 4Ô(Ø×%Ñ%¬2¯>©>¸$Ó+?ÈJÐdoÐ%ÕpÜ˜œdÔ#¬¨D«	°AªÜ'¨Ô-Ø×*Ñ*°ÀÐYdÐ*ÕeÜ& tÔ,Ø×%Ñ%¨4¸[Ð%ÕIäÐ NÓOÐOÜ˜œhÔ'Ø×!Ñ!¨ v¸;Ð!ÕGðbÜ—l‘l×-Ñ-¨dÓ3�Ø×$Ñ$¨¸ÐQ\Ð$Ô]ð ÐØ�N‰N˜5Ô!Ø�>‰>ÓÐ#ÜÐ7Ó8Ð8ØÐØ�O‰O˜FÔ#ØÐØ�N‰N˜5Ô!ØÐØ×Ñ˜hÔ'Ü�i¤Ô1Ø�‰Ð&¨:Ð+AÜÐaÔbØ×-Ñ-¸	ÈÐ[_Ð-Õ`ØÐ#Ø×Ñ 
Õ+ØÐ"ÜÐ3´D¸³O×4LÑ4LÐ3MÐNÓOÐOà×$Ñ$ \Ó2Ð2ùó]  Pøôr !ò bÜÐ"AÄ$ÀtÃ*×BUÑBUÐAVÐ WÓXÐ^aÐaûðbús   ÅV9Ò3V? Ö?	W/×"W*×*W/rÈ  rG  c              #   ó  K  — d}d}| |   }|D ]v  }||k\  sJ d«       ‚||t        |«      z   k\  r*|t        |«      z  }|dz  }| |   }||t        |«      z   k\  rŒ*||z
  }||   }|j                  d   r|n|j                  «       –— Œx y ­w)Nr   z+sample indices are expected to be monotonicr   ÚOWNDATA)r§   rU   r±   )rÈ  rG  r¯  Úseq_idÚseqÚrow_idÚ	id_in_seqÚrows           r5   Ú_yield_row_from_seqlistzDataset._yield_row_from_seqlist¡  s­   è ø€ àˆØˆØ�6‰lˆØò 	>ˆFØ˜VÒ#ÐRÐ%RÓRÐ#Ø˜F¤S¨£XÑ-Ò-Øœ#˜c›(Ñ"�Ø˜!‘�Ø˜6‘l�ð ˜F¤S¨£XÑ-Ó-ð  ™ˆIØ�i‘.ˆCØŸ™ 9Ò-‘#°3·8±8³:Ó=ñ	>ùs   ‚ABÁ0Bc                óÐ  — | j                  |¬«      }t        j                  t        | j	                  ||«      «      «      }|j
                  }g }g }t        j                  t        |«      t        j                  ¬«      }|D ]`  }t        j                  |«      t        kD  t        j                  |«      z  }	||	   }
||	   }|j                  |
«       |j                  |«       Œb ||fS )z±Sample data from seqs.

        Mimics behavior in c_api.cpp:LGBM_DatasetCreateFromMats()

        Returns
        -------
            sampled_rows, sampled_row_indices
        )r=   rÆ   )rˆ  rR   r®   rµ   rí  ÚTr   r§   ri  Úabsr:   Úisnanr‡   )rk   rÈ  r=   rG  ÚsampledÚfilteredÚfiltered_idxÚsampled_row_ranger”  Úcol_predicateÚfiltered_colÚfiltered_row_idxs               r5   Ú__samplezDataset.__sample°  sÐ   € ð ×-Ñ-¸Ð-ÓDˆô —(‘(œ4 × <Ñ <¸TÀ7Ó KÓLÓMˆØ—)‘)ˆàˆØˆÜŸI™I¤c¨'£l¼"¿(¹(ÔCÐØò 	2ˆCÜŸV™V C›[¬>Ñ9¼R¿X¹XÀc»]ÑJˆMØ˜}Ñ-ˆLØ0°Ñ?Ðà�O‰O˜LÔ)Ø×ÑÐ 0Õ1ð	2ð ˜Ð%Ð%r4   c                ó¾  — t        d„ |D «       «      }|�| j                  ||«       nOt        | j                  «       «      }t	        ||«      }| j                  ||¬«      \  }}| j                  ||||«       |D ]a  }t        |«      }	t        |dd«      xs t        j                  }
t        d|	|
«      D ]%  }t        ||
z   |	«      }| j                  ||| «       Œ' Œc | S )zú
        Initialize data from list of Sequence objects.

        Sequence: Generic Data Access Object
            Supports random access and access by batch if properly defined by user

        Data scheme uniformity are trusted, not checked
        c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr9   rù   )rº   ré  s     r5   r»   z+Dataset.__init_from_seqs.<locals>.<genexpr>Ú  s   è ø€ Ò2 cœ˜SŸÑ2ùr  N)rÈ  r=   r½  r   )r$  rŒ  r  r„  rI   Ú_Dataset__sampler›  r§   ry   r&   r½  r�  ÚminrŸ  )rk   rÈ  r‰  r=   r†  rH   r�  Úcol_indicesré  r  r½  ÚstartÚends                r5   Ú__init_from_seqszDataset.__init_from_seqsÌ  sç   € ô Ñ2¨TÔ2Ó2ˆ
ð Ð"Ø×'Ñ'¨
°KÕ@ä*¨4¯?©?Ó+<Ó=ˆIÜ*¨:°yÓAˆJà'+§}¡}¸$È: }Ó'VÑ$ˆK˜Ø×"Ñ" ;°¸ZÈÔTàò 	0ˆCÜ�s“8ˆDÜ   l°DÓ9ÒP¼X×=PÑ=PˆJÜ˜q $¨
Ó3ò 0�Ü˜% *Ñ,¨dÓ3�Ø—‘  E¨# Õ/ñ0ð	0ð ˆr4   rJ   rš  c                ó  — t        |j                  «      dk7  rt        d«      ‚t        j                  «       | _        t        |«      \  }}t        |«      \  }}}t        t        j                  |t        j                  |«      t        j                  |j                  d   «      t        j                  |j                  d   «      t        j                  |«      t        |«      |t        j                  | j
                  «      «      «       | S )z(Initialize data from a 2-D numpy matrix.r¬   ú)Input numpy.ndarray must be 2 dimensionalr   r   )r§   r¨   r    r@   rÖ   rÈ  r\   rg  rB   r   ÚLGBM_DatasetCreateFromMatrA   rD   rE   rF   )	rk   rJ   rš  r‰  r[   rZ   re  r  r  s	            r5   Ú__init_from_np2dzDataset.__init_from_np2dî  sÈ   € ô ˆs�y‰y‹>˜QÒÜÐHÓIÐIä—‘Ó(ˆŒÜ$ SÓ)‰ˆˆfÜ%3°DÓ%9Ñ"ˆ�- ÜÜ×*Ñ*ØÜ—‘˜]Ó+Ü—‘˜sŸy™y¨™|Ó,Ü—‘˜sŸy™y¨™|Ó,Ü—‘˜VÓ$Ü�zÓ"ØÜ—‘˜TŸ\™\Ó*ó	ô	
ð ˆr4   rÇ  c                óš  — |d   j                   d   }t        j                  t        |«      ft        j                  «      }|d   j
                  t        j                  k(  r5 t        j                  t        j                  «      t        |«      z  «       }n4 t        j                  t        j                  «      t        |«      z  «       }t        j                  t        |«      z  «       }g }d}	t        |«      D ]¦  \  }
}t        |j                   «      dk7  rt        d«      ‚|j                   d   |k7  rt        d«      ‚|j                   d   ||
<   t        |«      \  }}t        |«      \  }}}|	dk7  r||	k7  rt        d«      ‚|||
<   |||
<   |}	|j!                  |«       Œ¨ t        j"                  «       | _        t'        t)        j*                  t        j,                  t        |«      «      t        j.                  |t        j                  t        j                  t        j                  «      «      «      t        j                  |	«      |j                  j1                  t        j                  t        j,                  «      «      t        j,                  |«      |t3        |«      |t        j4                  | j$                  «      «	      «       | S )z2Initialize data from a list of 2-D numpy matrices.r   r   rŠ  r¬   r  z-Input arrays must have same number of columnsz Input chunks must have same type)r¨   rR   r  r§   ri  rO   rT   r@   râ   rë   rã   rA   rÑ  r    r\   rg  r‡   rÖ   rÈ  rB   r   ÚLGBM_DatasetCreateFromMatsrD   r“  ra  rE   rF   )rk   rÇ  rš  r‰  r”  r  re  ÚlayoutsÚholdersr  rC  rJ   rZ   Úchunk_ptr_dataÚchunk_type_ptr_dataÚholders                   r5   Ú__init_from_list_np2dzDataset.__init_from_list_np2d
	  s  € ð �A‰w�}‰}˜QÑˆÜ�x‰xœ˜T›˜¤b§h¡hÓ/ˆà�‰7�=‰=œBŸJ™JÒ&ØCœŸ™¤v§¡Ó7¼#¸d»)ÑCÓF‰HàBœŸ™¤v§~¡~Ó6¼¸T»ÑBÓEˆHÜ—<‘<¤# d£)Ñ+Ó.ˆàˆØˆä “oò 	#‰FˆAˆsÜ�3—9‘9‹~ Ò"Ü Ð!LÓMÐMà�y‰y˜‰|˜tÒ#Ü Ð!PÓQÐQà—i‘i ‘lˆD�‰Gä'¨Ó,‰KˆC�ä:HÈÓ:MÑ7ˆNÐ/°Ø Ò"Ð':¸mÒ'KÜ Ð!CÓDÐDØ(ˆH�Q‰KØˆG�A‰JØ/ˆMØ�N‰N˜6Õ"ð#	#ô& —‘Ó(ˆŒÜÜ×+Ñ+Ü—‘œs 4›yÓ)Ü—‘˜H¤f§n¡n´V·^±^ÄFÇOÁOÓ5TÓ&UÓVÜ—‘˜]Ó+Ø—‘×#Ñ#¤F§N¡N´6·>±>Ó$BÓCÜ—‘˜tÓ$ØÜ�zÓ"ØÜ—‘˜TŸ\™\Ó*ó
ô	
ð ˆr4   rí  c                ó  — t        |j                  «      t        |j                  «      k7  r7t        dt        |j                  «      › dt        |j                  «      › �«      ‚t	        j
                  «       | _        t        |j                  «      \  }}}t        |j                  «      \  }}}	|j                  d   t        k  sJ ‚|j                  j                  t        j                  d¬«      }
t        t!        j"                  |t	        j$                  |«      |
j                  j'                  t	        j(                  t        j*                  «      «      |t	        j$                  |«      t	        j,                  t        |j                  «      «      t	        j,                  t        |j                  «      «      t	        j,                  |j                  d   «      t/        |«      |t	        j0                  | j                  «      «      «       | S )z"Initialize data from a CSR matrix.úLength mismatch: ú vs r   Frz  )r§   rG  r[   r    r@   rÖ   rÈ  rm  r6  rg  r¨   r  r²   rR   ri  rB   r   ÚLGBM_DatasetCreateFromCSRrA   ra  râ   rD   rñ   rE   rF   )rk   rí  rš  r‰  rI  rJ  rR  re  r  r  rK  s              r5   Ú__init_from_csrzDataset.__init_from_csrA	  óf  € ô ˆs�{‰{Óœs 3§8¡8›}Ò,ÜÐ0´°S·[±[Ó1AÐ0BÀ$ÄsÈ3Ï8É8Ã}ÀoÐVÓWÐWÜ—‘Ó(ˆŒä*6°s·z±zÓ*BÑ'ˆ
�O RÜ%3°C·H±HÓ%=Ñ"ˆ�- à�y‰y˜‰|œzÒ)Ð)Ð)Ø—k‘k×(Ñ(¬¯©¸Ð(Ó>ˆäÜ×*Ñ*ØÜ—‘˜_Ó-Ø×"Ñ"×*Ñ*¬6¯>©>¼&¿.¹.Ó+IÓJØÜ—‘˜]Ó+Ü—‘œs 3§:¡:›Ó/Ü—‘œs 3§8¡8›}Ó-Ü—‘˜sŸy™y¨™|Ó,Ü�zÓ"ØÜ—‘˜TŸ\™\Ó*óô	
ð ˆr4   rð  c                ó  — t        |j                  «      t        |j                  «      k7  r7t        dt        |j                  «      › dt        |j                  «      › �«      ‚t	        j
                  «       | _        t        |j                  «      \  }}}t        |j                  «      \  }}}	|j                  d   t        k  sJ ‚|j                  j                  t        j                  d¬«      }
t        t!        j"                  |t	        j$                  |«      |
j                  j'                  t	        j(                  t        j*                  «      «      |t	        j$                  |«      t	        j,                  t        |j                  «      «      t	        j,                  t        |j                  «      «      t	        j,                  |j                  d   «      t/        |«      |t	        j0                  | j                  «      «      «       | S )z"Initialize data from a CSC matrix.r  r  r   Frz  )r§   rG  r[   r    r@   rÖ   rÈ  rm  r6  rg  r¨   r  r²   rR   ri  rB   r   ÚLGBM_DatasetCreateFromCSCrA   ra  râ   rD   rñ   rE   rF   )rk   rð  rš  r‰  rI  rJ  rR  re  r  r  r^  s              r5   Ú__init_from_csczDataset.__init_from_cscd	  r  r4   c          
      óø   — |j                  «       }t        j                  «       | _        t	        t        j                  t        |«      t        |«      |t        j                  | j                  «      «      «       | S )z*Initialize data from a narwhals DataFrame.)
rf  r@   rÖ   rÈ  rB   r   Ú!LGBM_DatasetCreateFromArrowStreamrØ   rE   rF   )rk   r[   rš  r‰  rÔ   s        r5   Ú__init_from_narwhalszDataset.__init_from_narwhals‡	  sb   € ð ×+Ñ+Ó-ˆ	ô —‘Ó(ˆŒÜÜ×2Ñ2Ü5°iÓ@Ü�zÓ"ØÜ—‘˜TŸ\™\Ó*ó	ô	
ð ˆr4   Úother_paramsÚignore_keysc                 ó°   — |j                  «       D ]  \  }}||vsŒ|| vs	| |   |k7  sŒ y | j                  «       D ]  \  }}||vsŒ||vs	|||   k7  sŒ y y)a  Compare two dictionaries with params ignoring some keys.

        It is only for the warning purpose.

        Parameters
        ----------
        params : dict
            One dictionary with parameters to compare.
        other_params : dict
            Another dictionary with parameters to compare.
        ignore_keys : set
            Keys that should be ignored during comparing two dictionaries.

        Returns
        -------
        compare_result : bool
          Returns whether two dictionaries with params are equal.
        FTr,  )r>   r  r  r-  r.  s        r5   Ú_compare_params_for_warningz#Dataset._compare_params_for_warningž	  sz   € ð2 !×&Ñ&Ó(ò 	!‰DˆAˆqØ˜Ò#Ø˜F‘? f¨Q¡i°1£nÙ ð	!ð —L‘L“Nò 	!‰DˆAˆqØ˜Ò#Ø˜LÑ(¨A°¸a±Ó,@Ù ð	!ð r4   c                 ó@	  — | j                   �€�| j                  ��Û| j                  j                  «       }| j                  «       }||k7  rC| j                  ||t        j                  d«      ¬«      st        d«       | j                  |«       | j                  €‚| j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                   | j"                  d| j$                  ¬«       �n[t'        | j                  t(        j*                  d¬«      }|j,                  j.                  sJ ‚| j                  j                  �›t)        j0                  | j                  j                  «      j3                  t(        j*                  d	¬
«      }t)        j4                  t)        j6                  t9        t;        |«      «      |¬«      | j                     d¬«      \  }| _        t=        j>                  «       | _         tA        | j$                  «      }tC        tE        jF                  | j                  jI                  «       j                   |j<                  jK                  t=        jL                  t<        jN                  «      «      t=        jN                  |jP                  d   «      tS        |«      t=        jT                  | j                   «      «      «       | jV                  s| jY                  «        | j                  �| j[                  | j                  «       | j                  �| j]                  | j                  «       | j_                  «       €ta        d«      ‚tc        | j                   td        «      rÛ| j                   | j                  j                   ur¹| jY                  «        | jg                  | j                   | j                  |¬«       n€| j                  | j                  | j                  d| j                  | j                  | j                  | j                   | j"                  | jh                  | j$                  | j                  ¬«       | jV                  rd| _
        | jk                  «       | _        | S )zsLazy init.

        Returns
        -------
        self : Dataset
            Constructed Dataset object.
        Nr€  )r>   r  r  z1Overriding the parameters from Reference Dataset.r„  )r[   rS  rw  rT  rV  rW  rU  r¸  r  r€  r>   rz  rÛ   Frz  )ÚrepeatsT)Úreturn_countsr   zLabel should not be None.rÉ  )r[   rS  rw  rT  rV  rU  r¸  r  r€  r>   rW  )6rÈ  rw  r„  r  r(  rD  r�   Ú_update_paramsrz  rÏ  r[   rS  rT  rV  rW  rU  r|  r  r>   rÍ   rR   ri  rU   r\  r®   r²   ÚuniqueÚrepeatr�  r§   r@   rÖ   r  rB   r   ÚLGBM_DatasetGetSubsetrÔ  ra  râ   rD   r¨   rE   rF   rx  Úget_datarß  rà  rÝ  r    r¥   rÃ  rÄ  r€  Úget_feature_name)rk   Úreference_paramsr>   rz  Ú
group_infor  rš  s          r5   rÔ  zDataset.constructÁ	  sl  € ð �<‰<ÑØ�~‰~Ñ)Ø#'§>¡>×#<Ñ#<Ó#>Ð ØŸ™Ó*�ØÐ-Ò-Ø×;Ñ;Ø%Ø%5Ü$2×$6Ñ$6Ð7LÓ$Mð <ô ô
 %Ð%XÔYØ×'Ñ'Ð(8Ô9Ø×$Ñ$Ð,à—O‘OØ!ŸY™YØ"Ÿj™jØ"&§.¡.Ø#Ÿ{™{Ø"Ÿj™jØ!%§¡Ø#'§?¡?Ø"&§/¡/Ø%)×%6Ñ%6Ø,2Ø#Ÿ{™{ð $ö ô $5Ø!×.Ñ.Ü Ÿh™hØ+ô$�Lð
 (×-Ñ-×:Ò:Ð:Ð:Ø—~‘~×+Ñ+Ð7Ü%'§X¡X¨d¯n©n×.BÑ.BÓ%C×%JÑ%JÌ2Ï8É8ÐZ_Ð%JÓ%`˜
Ü(*¯	©	ÜŸI™I¤e¬C°
«OÓ&<ÀjÔQÐRV×RcÑRcÑdÐtxô)™˜˜4œ:ô $*§?¡?Ó#4�D”LÜ!3°D·K±KÓ!@�JÜÜ×2Ñ2Ø ŸN™N×4Ñ4Ó6×>Ñ>Ø(×/Ñ/×7Ñ7¼¿¹ÄvÇ~Á~Ó8VÓWÜ"ŸN™N¨<×+=Ñ+=¸aÑ+@ÓAÜ" :Ó.Ü"ŸL™L¨¯©Ó6óôð  ×-Ò-ØŸ™œØ—z‘zÐ-ØŸ™ t§z¡zÔ2Ø—}‘}Ð0Ø×)Ñ)¨$¯-©-Ô8Ø—~‘~Ó'Ð/Ü(Ð)DÓEÐEä" 4§?¡?´OÔDØ ŸO™O°4·>±>×3LÑ3LÑLàŸ™œØ×9Ñ9Ø&*§o¡o¸D¿I¹IÐT`ð :õ ð
 —‘ØŸ™ØŸ*™*Ø"ØŸ;™;ØŸ*™*Ø#Ÿ™Ø"Ÿo™oØ!%×!2Ñ!2Ø(,×(@Ñ(@ØŸ;™;Ø!Ÿ]™]ð  ô ð ×!Ò!Ø �”	Ø $× 5Ñ 5Ó 7ˆDÔØˆr4   c                 ó†   — t        ||| |||||| j                  ¬«	      }| j                  |_        | j                  |_        |S )aJ  Create validation data align with current Dataset.

        Parameters
        ----------
        data : str, pathlib.Path, numpy array, pandas DataFrame, scipy.sparse, Sequence, list of Sequence, list of numpy array, pyarrow Table or polars DataFrame
            Data source of Dataset.
            If str or pathlib.Path, it represents the path to a text file (CSV, TSV, or LibSVM) or a LightGBM Dataset binary file.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        label : list, numpy 1-D array, pandas Series / one-column DataFrame, pyarrow ChunkedArray, polars Series or None, optional (default=None)
            Label of the data.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        weight : list, numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None, optional (default=None)
            Weight for each instance. Weights should be non-negative.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        group : list, numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None, optional (default=None)
            Group/query data.
            Only used in the learning-to-rank task.
            sum(group) = n_samples.
            For example, if you have a 100-document dataset with ``group = [10, 20, 40, 10, 10, 10]``, that means that you have 6 groups,
            where the first 10 records are in the first group, records 11-30 are in the second group, records 31-70 are in the third group, etc.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        init_score : list, list of lists (for multi-class task), numpy array, pandas Series, pandas DataFrame (for multi-class task), pyarrow ChunkedArray, pyarrow Table (for multi-class task), polars Series, polars DataFrame (for multi-class task) or None, optional (default=None)
            Init score for Dataset.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        params : dict or None, optional (default=None)
            Other parameters for validation Dataset.
        position : numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None, optional (default=None)
            Position of items used in unbiased learning-to-rank task.

        Returns
        -------
        valid : Dataset
            Validation Dataset with reference to self.
        )rS  rw  rT  rV  rW  rU  r>   rx  )r"   rx  r|  r�  )	rk   r[   rS  rT  rV  rU  r>   rW  rš   s	            r5   Úcreate_validzDataset.create_valid 
  sP   € ôT ØØØØØØØ!ØØ×,Ñ,ô

ˆð Ÿ™ˆŒØ!%×!8Ñ!8ˆÔØˆ
r4   c                 óä   — |€| j                   }t        d| | j                  | j                  || j                  ¬«      }| j
                  |_        | j                  |_        t        |«      |_        |S )a€  Get subset of current Dataset.

        Parameters
        ----------
        used_indices : list of int
            Indices used to create the subset.
        params : dict or None, optional (default=None)
            These parameters will be passed to Dataset constructor.

        Returns
        -------
        subset : Dataset
            Subset of the current Dataset.
        N)rw  r  r€  r>   rx  )	r>   r"   r  r€  rx  r|  r�  rÓ  rz  )rk   rz  r>   rš   s       r5   ÚsubsetzDataset.subsety
  sm   € ð& ˆ>Ø—[‘[ˆFÜØØØ×*Ñ*Ø $× 8Ñ 8ØØ×,Ñ,ô
ˆð Ÿ™ˆŒØ!%×!8Ñ!8ˆÔÜ! ,Ó/ˆÔØˆ
r4   Úfilenamec           
      ó˜   — t        t        j                  | j                  «       j                  t        t        |«      «      «      «       | S )aŽ  Save Dataset to a binary file.

        .. note::

            Please note that `init_score` is not saved in binary file.
            If you need it, please set it again after loading Dataset.

        Parameters
        ----------
        filename : str or pathlib.Path
            Name of the output file.

        Returns
        -------
        self : Dataset
            Returns self.
        )rB   r   ÚLGBM_DatasetSaveBinaryrÔ  rÈ  rE   rs   ©rk   r-  s     r5   Úsave_binaryzDataset.save_binary›
  s=   € ô$ 	Ü×'Ñ'Ø—‘Ó ×(Ñ(Ü”s˜8“}Ó%óô	
ð ˆr4   c                 ó˜  ‡ ‡— ‰s‰ S t        ‰«      Šdˆˆ fd„}‰ j                  €	 |«        ‰ S ‰�št        j                  t	        t        ‰ j                  «      «      t	        t        ‰«      «      «      }|dk7  rQ‰ j                  � |«        ‰ j                  «        ‰ S t        t        j                  «       j                  d«      «      ‚‰ S )Nc                  ó˜   •— ‰j                   s‰ ‰_         y t        ‰j                   «      ‰_        ‰j                   j                  ‰ «       y r9   )r>   r   r}  r@  )r>   rk   s   €€r5   r@  z&Dataset._update_params.<locals>.updateº
  s4   ø€ Ø—;’;Ø$�•ä'/°·±Ó'<�Ô$Ø—‘×"Ñ" 6Õ*r4   r   r”   ro  )r   rÈ  r   ÚLGBM_DatasetUpdateParamCheckingrE   r  r>   r[   r‚  r$   rœ   r•   )rk   r>   r@  rš   s   ``  r5   r!  zDataset._update_paramsµ
  s»   ù€ ÙØˆKÜ˜&Ó!ˆö	+ð �<‰<ÐÙŒHð ˆð ÐÜ×6Ñ6ÜÔ)¨$¯+©+Ó6Ó7ÜÔ)¨&Ó1Ó2óˆCð �aŠxà—9‘9Ð(Ù”HØ×%Ñ%Ô'ð ˆô (¬×(>Ñ(>Ó(@×(GÑ(GÈÓ(PÓQÐQØˆr4   c                 ó`   — | j                   €!t        | j                  «      | _        d | _        | S r9   )rÈ  r   r}  r>   r»  s    r5   Ú_reverse_update_paramszDataset._reverse_update_paramsÑ
  s+   € Ø�<‰<ÐÜ" 4×#7Ñ#7Ó8ˆDŒKØ#'ˆDÔ Øˆr4   Ú
field_namec                 óê  — | j                   €t        d|› d�«      ‚|€dt        t        j                  | j                   t        |«      dt        j                  d«      t        j                  t        |   «      «      «       | S t        j                  |«      st        j                  |«      rŽt        |t        t        f«      sxt        j                   |d¬«      j#                  «       }t        t        j$                  | j                   t        |«      t'        |«      «      «       | xj(                  dz  c_        | S |dk(  rat*        j,                  }t/        |«      rt1        |||¬	«      }njt3        |«      r!t5        |||¬	«      }|j7                  d
¬«      }n>t9        d«      ‚|dv rt*        j:                  }nt*        j<                  }t1        |||¬	«      }|j>                  t*        j<                  k(  s|j>                  t*        j,                  k(  rtA        |«      \  }}}nF|j>                  t*        j:                  k(  rtC        |«      \  }}}nt9        d|j>                  › d�«      ‚|t        |   k7  rt9        d«      ‚t        t        j                  | j                   t        |«      |t        j                  tE        |«      «      t        j                  |«      «      «       | xj(                  dz  c_        | S )a·  Set property into the Dataset.

        Parameters
        ----------
        field_name : str
            The field name of the information.
        data : list, list of lists (for multi-class task), numpy array, pandas Series, pandas DataFrame (for multi-class task), pyarrow ChunkedArray, pyarrow Table (for multi-class task), polars Series, polars DataFrame (for multi-class task) or None
            The data to be set.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        Returns
        -------
        self : Dataset
            Dataset with set property.
        NzCannot set z before construct datasetr   T)Úallow_seriesr   rU  rÛ   rM   rQ   z¤init_score must be list, numpy 1-D array or pandas Series.
In multiclass classification init_score can also be a list of lists, numpy 2-D array or pandas DataFrame.>   rV  rW  z-Expected np.float32/64 or np.int32, met type(r_  zInput type error for set_field)#rÈ  Ú	ExceptionrB   r   ÚLGBM_DatasetSetFieldrE   r@   rA   Ú_FIELD_TYPE_MAPPERrÿ  r   Úis_into_seriesr¥   r   r   r  r  rf  Ú#LGBM_DatasetSetFieldFromArrowStreamrØ   r~  rR   rT   rÃ   rÍ   rÓ   rÜ   rY   r~   ri  rS   rO   rg  rm  r§   )rk   r7  r[   rÔ   rO   re  rf  r  s           r5   Ú	set_fieldzDataset.set_field×
  sm  € ð2 �<‰<ÐÜ˜k¨*¨Ð5NÐOÓPÐPØˆ<äÜ×)Ñ)Ø—L‘LÜ˜:Ó&ØÜ—L‘L “OÜ—L‘LÔ!3°JÑ!?Ó@óôð ˆKô ×!Ñ! $Ô'¬3×+=Ñ+=¸dÔ+CÌZØ”<¤Ð+ôN
ô Ÿ™ t¸$Ô?×RÑRÓTˆIÜÜ×8Ñ8Ø—L‘LÜ˜:Ó&Ü9¸)ÓDóôð �LŠL˜AÑ�LØˆKð ˜Ò%Ü—J‘JˆEÜ  Ô&Ü(¨d¸%ÀjÔQ‘Ü" 4Ô(Ü(¨d¸%ÀjÔQ�Ø—z‘z¨�zÓ,‘äð@óð ð
 Ð2Ñ2ÜŸ™‘äŸ
™
�Ü$¨$°eÀ*ÔMˆDð �:‰:œŸ™Ò# t§z¡z´R·Z±ZÒ'?Ü%3°DÓ%9Ñ"ˆH�i¡Ø�Z‰Zœ2Ÿ8™8Ò#Ü%1°$Ó%7Ñ"ˆH�i¡äÐKÈDÏJÉJÈ<ÐWXÐYÓZÐZØÔ*¨:Ñ6Ò6ÜÐ<Ó=Ð=ÜÜ×%Ñ%Ø—‘Ü�zÓ"ØÜ—‘œS ›YÓ'Ü—‘˜YÓ'óô	
ð 	�Š˜Ñ�Øˆr4   c                 óð  — | j                   €t        d|› d�«      ‚t        j                  d«      }t        j                  d«      } t        j                  t        j
                  «      «       }t        t        j                  | j                   t        |«      t        j                  |«      t        j                  |«      t        j                  |«      «      «       |j                  t        |   k7  rt        d«      ‚|j                  dk(  ry|j                  t        k(  rMt        t        j                   |t        j                  t        j"                  «      «      |j                  ¬«      }nË|j                  t$        k(  rMt'        t        j                   |t        j                  t        j(                  «      «      |j                  ¬«      }nk|j                  t*        k(  rMt-        t        j                   |t        j                  t        j.                  «      «      |j                  ¬«      }nt        d«      ‚|dk(  r9| j1                  «       }|j2                  |z  }|d	kD  r|j5                  ||fd
¬«      }|S )ad  Get property from the Dataset.

        Can only be run on a constructed Dataset.

        Unlike ``get_group()``, ``get_init_score()``, ``get_label()``, ``get_position()``, and ``get_weight()``,
        this method ignores any raw data passed into ``lgb.Dataset()`` on the Python side, and will only read
        data from the constructed C++ ``Dataset`` object.

        Parameters
        ----------
        field_name : str
            The field name of the information.

        Returns
        -------
        info : numpy array or None
            A numpy array with information from the Dataset.
        NzCannot get z before construct Datasetr   zReturn type error for get_fieldrç   zUnknown typerU  r   rM   rQ   )rÈ  r:  r@   rA   râ   rÖ   rB   r   ÚLGBM_DatasetGetFieldrE   rF   rG   r<  r~   rj  rï   r“  rD   rb  rè   rã   rc  rì   rë   r¾  r  r  )rk   r7  r8  Úout_typerš   Úarrr¾  Únum_classess           r5   Ú	get_fieldzDataset.get_field7  sÔ  € ð& �<‰<ÐÜ˜k¨*¨Ð5NÐOÓPÐPÜ—l‘l 1“oˆÜ—<‘< “?ˆØ-Œf�n‰nœVŸ_™_Ó-Ó/ˆÜÜ×%Ñ%Ø—‘Ü�zÓ"Ü—‘˜[Ó)Ü—‘˜SÓ!Ü—‘˜XÓ&óô	
ð �>‰>Ô/°
Ñ;Ò;ÜÐ=Ó>Ð>Ø×Ñ Ò!ØØ�>‰>Ô/Ò/Ü(Ü—[‘[ ¤f§n¡n´V·^±^Ó&DÓEØ"×(Ñ(ô‰Cð �^‰^Ô3Ò3Ü*Ü—[‘[ ¤f§n¡n´V·^±^Ó&DÓEØ"×(Ñ(ô‰Cð �^‰^Ô3Ò3Ü*Ü—[‘[ ¤f§n¡n´V·_±_Ó&EÓFØ"×(Ñ(ô‰Cô
 ˜NÓ+Ð+Ø˜Ò%Ø—}‘}“ˆHØŸ(™( hÑ.ˆKØ˜QŠØ—k‘k 8¨[Ð"9À�kÓE�Øˆ
r4   c                 ó   — | j                   |k(  r| S | j                  �g| j                   €|| _         | j                  «       S |dk(  r| S | j                   dk7  rt        dt	        |«      › �«       || _         | j                  «       S t        d«      ‚)a&  Set categorical features.

        Parameters
        ----------
        categorical_feature : list of str or int, or 'auto'
            Names or indices of categorical features.

        Returns
        -------
        self : Dataset
            Dataset with set categorical features.
        r„  zIcategorical_feature in Dataset is overridden.
New categorical_feature is zrCannot set categorical feature after freed raw data, set free_raw_data=False when construct Dataset to avoid this.)r€  r[   r‚  r�   rµ   r$   )rk   r€  s     r5   Úset_categorical_featurezDataset.set_categorical_featuret  s«   € ð  ×#Ñ#Ð':Ò:ØˆKØ�9‰9Ð Ø×'Ñ'Ð/Ø+>�Ô(Ø×(Ñ(Ó*Ð*Ø$¨Ò.Ø�à×+Ñ+¨vÒ5Ü ð6Ü6:Ð;NÓ6OÐ5PðRôð ,?�Ô(Ø×(Ñ(Ó*Ð*äðPóð r4   c                 óŽ  — |€| j                   €| S t        |t        «      rVt        | j                   t        «      r<|| j                   k(  r-|j                  «       | j                   j                  «       k(  r| S | j                  €	|| _         | S | j
                  �1|| _         | j                  | j                   | j
                  d¬«       | S | j                  �g| j                  �[| j                  j
                  �E|| _         | j                  | j                   | j                  j
                  | j                  ¬«       | S t        d«      ‚)z¾Set predictor for continued training.

        It is not recommended for user to call this function.
        Please use init_model argument in engine.train() or engine.cv() instead.
        NrÉ  zhCannot set predictor after freed raw data, set free_raw_data=False when construct Dataset to avoid this.)
r|  r¥   rÃ  rm  rÈ  r[   rÄ  rz  rw  r$   )rk   r¸  s     r5   Ú_set_predictorzDataset._set_predictorš  s.  € ð Ð §¡Ð!8ØˆKÜ˜	¤?Ô3¼
À4Ç?Á?ÔTcÔ8dØ˜TŸ_™_Ò,Ø×+Ñ+Ó-°·±×1RÑ1RÓ1TÒTà�Ø�<‰<ÐØ'ˆDŒOð( ˆð' �Y‰YÐ"Ø'ˆDŒOØ×-Ñ-ØŸ/™/Ø—Y‘YØ!ð .ô ð" ˆð ×ÑÐ*¨t¯~©~Ð/IÈdÏnÉn×NaÑNaÐNmØ'ˆDŒOØ×-Ñ-ØŸ/™/Ø—^‘^×(Ñ(Ø!×.Ñ.ð .ô ð ˆô	  ðPóð r4   c                 óV  — | j                  |j                  «      j                  |j                  «      j	                  |j
                  «       | j                  «       j                  |j                  «       «      r| S | j                  �|| _	        | j                  «       S t        d«      ‚)a  Set reference Dataset.

        Parameters
        ----------
        reference : Dataset
            Reference that is used as a template to construct the current Dataset.

        Returns
        -------
        self : Dataset
            Dataset with set reference.
        zhCannot set reference after freed raw data, set free_raw_data=False when construct Dataset to avoid this.)rG  r€  rá  r  rI  r|  Úget_ref_chainÚintersectionr[   rw  r‚  r$   )rk   rw  s     r5   Úset_referencezDataset.set_referenceÁ  s”   € ð 	×$Ñ$ Y×%BÑ%BÓC×TÑTØ×"Ñ"ó	
ç
‰.˜×-Ñ-Ô
.à×ÑÓ×,Ñ,¨Y×-DÑ-DÓ-FÔGØˆKØ�9‰9Ð Ø&ˆDŒNØ×$Ñ$Ó&Ð&äðPóð r4   c                 óÒ  — |dk7  r|| _         d| _        | j                  �Â|�À|dk7  r»t        |«      | j	                  «       k7  r)t        dt        |«      › d| j	                  «       › d�«      ‚|D �cg c]  }t        |«      ‘Œ }}t        t        j                  | j                  t        t        j                  |«      t        j                  t        |«      «      «      «       | S c c}w )zâSet feature name.

        Parameters
        ----------
        feature_name : list of str
            Feature names.

        Returns
        -------
        self : Dataset
            Dataset with set feature name.
        r„  TzLength of feature_name(z) and num_feature(ú) don't match)r  r€  rÈ  r§   Únum_featurer    rE   rB   r   ÚLGBM_DatasetSetFeatureNamesrú   r@   rõ   rA   )rk   r  rÄ   Úc_feature_names       r5   rá  zDataset.set_feature_nameÝ  sÞ   € ð ˜6Ò!Ø ,ˆDÔØ26ˆDÔ/Ø�<‰<Ð#¨Ð(@À\ÐU[ÒE[Ü�<Ó  D×$4Ñ$4Ó$6Ò6Ü Ø-¬c°,Ó.?Ð-@Ð@RÐSW×ScÑScÓSeÐRfÐfsÐtóð ð 8DÖD¨tœf T�lÐDˆNÐDÜÜ×0Ñ0Ø—L‘LÜœVŸ_™_¨nÓ=Ü—L‘L¤ \Ó!2Ó3óôð ˆùò Es   Á0C$c                 óò  — || _         | j                  �ãt        |t        «      rRt	        |j
                  «      dkD  rt        d«      ‚t        j                  t        |t        j                  ¬«      «      }nYt        j                  |«      st        j                  |«      rt        |t        «      s|}nt        |t        j                  d¬«      }| j!                  d|«       | j#                  d«      | _         | S )aû  Set label of Dataset.

        Parameters
        ----------
        label : list, numpy 1-D array, pandas Series / one-column DataFrame, pyarrow ChunkedArray, polars Series or None
            The label information to be set into Dataset.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        Returns
        -------
        self : Dataset
            Dataset with set label.
        r   z0DataFrame for label cannot have multiple columnsr‹  rS  rÛ   )rS  rÈ  r¥   r   r§   rŒ  r    rR   rY   r~  rS   rÿ  r   r=  r   rÍ   r?  rE  )rk   rS  Úlabel_arrays      r5   rÜ  zDataset.set_labelü  s¸   € ð& ˆŒ
Ø�<‰<Ð#Ü˜%¤Ô.Ü�u—}‘}Ó%¨Ò)Ü$Ð%WÓXÐXÜ Ÿh™hÔ'7¸ÌBÏJÉJÔ'WÓX‘Ü×'Ñ'¨Ô.´#×2DÑ2DÀUÔ2KÔU_Ð`eÔgpÔUqØ#‘ä/°UÄ"Ç*Á*ÐSZÔ[�Ø�N‰N˜7 KÔ0ØŸ™¨Ó0ˆDŒJØˆr4   c                 óº  — |�Zt        j                  |«      r+t        j                  |d¬«      dk(  j	                  «       rd}nt        j                  |dk(  «      rd}|| _        | j                  �k|�it        |t        «      st        j                  |«      st        |t
        j                  d¬«      }| j                  d|«       | j                  d«      | _        | S )a  Set weight of each instance.

        Parameters
        ----------
        weight : list, numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None
            Weight to be set for each data point. Weights should be non-negative.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        Returns
        -------
        self : Dataset
            Dataset with set weight.
        NT)Úseries_onlyr   rT  rÛ   )rÿ  r=  r  r  r½   rR   rT  rÈ  r¥   r   rÍ   rS   r?  rE  )rk   rT  s     r5   rÞ  zDataset.set_weight  s²   € ð. ÐÜ×!Ñ! &Ô)Ü—N‘N 6°tÔ<ÀÑA×FÑFÔHØ!‘FÜ—‘˜ !™Ô$Ø�ØˆŒð �<‰<Ð#¨Ð(:Ü˜&¤)Ô,´C×4FÑ4FÀvÔ4NÜ*°¼b¿j¹jÈxÔX�Ø�N‰N˜8 VÔ,ØŸ.™.¨Ó2ˆDŒKØˆr4   c                 ó€   — || _         | j                  �*|�(| j                  d|«       | j                  d«      | _         | S )a…  Set init score of Booster to start from.

        Parameters
        ----------
        init_score : list, list of lists (for multi-class task), numpy array, pandas Series, pandas DataFrame (for multi-class task), pyarrow ChunkedArray, pyarrow Table (for multi-class task), polars Series, polars DataFrame (for multi-class task) or None
            Init score for Booster.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        Returns
        -------
        self : Dataset
            Dataset with set init score.
        rU  )rU  rÈ  r?  rE  )rk   rU  s     r5   rÀ  zDataset.set_init_scoreD  s=   € ð, %ˆŒØ�<‰<Ð#¨
Ð(>Ø�N‰N˜<¨Ô4Ø"Ÿn™n¨\Ó:ˆDŒOØˆr4   c                 ó0  — || _         | j                  �‚|�€t        |t        «      st	        j
                  |«      st        |t        j                  d¬«      }| j                  d|«       | j                  d«      }|�t        j                  |«      | _         | S )aS  Set group size of Dataset (used for ranking).

        Parameters
        ----------
        group : list, numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None
            Group/query data.
            Only used in the learning-to-rank task.
            sum(group) = n_samples.
            For example, if you have a 100-document dataset with ``group = [10, 20, 40, 10, 10, 10]``, that means that you have 6 groups,
            where the first 10 records are in the first group, records 11-30 are in the second group, records 31-70 are in the third group, etc.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        Returns
        -------
        self : Dataset
            Dataset with set group.
        rV  rÛ   )rV  rÈ  r¥   r   rÿ  r=  rÍ   rR   ri  r?  rE  r!  )rk   rV  Úconstructed_groups      r5   rß  zDataset.set_group`  s|   € ð4 ˆŒ
Ø�<‰<Ð#¨Ð(9Ü˜%¤Ô+´3×3EÑ3EÀeÔ3LÜ)¨u¼B¿H¹HÈ7ÔS�Ø�N‰N˜7 EÔ*à $§¡¨wÓ 7ÐØ Ð,ÜŸW™WÐ%6Ó7�”
Øˆr4   c                 ó  — || _         | j                  �k|�it        |t        «      st	        j
                  |«      st        |t        j                  d¬«      }| j                  d|«       | j                  d«      | _         | S )ax  Set position of Dataset (used for ranking).

        Parameters
        ----------
        position : numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None, optional (default=None)
            Position of items used in unbiased learning-to-rank task.

        Returns
        -------
        self : Dataset
            Dataset with set position.
        rW  rÛ   )rW  rÈ  r¥   r   rÿ  r=  rÍ   rR   ri  r?  rE  )rk   rW  s     r5   rà  zDataset.set_position…  sg   € ð  !ˆŒØ�<‰<Ð#¨Ð(<Ü˜(¤IÔ.´c×6HÑ6HÈÔ6RÜ,°(Ä"Ç(Á(ÐQ[Ô\�Ø�N‰N˜: xÔ0Ø ŸN™N¨:Ó6ˆDŒMØˆr4   c                 óÊ  — | j                   €t        d«      ‚| j                  «       }t        j                  d«      }d}t        j
                  d«      }t        |«      D �cg c]  }t        j                  |«      ‘Œ }}t        j                  |z  t        t        j                  |«      Ž }t        t        j                  | j                   t        j                  |«      t        j                  |«      t        j
                  |«      t        j                  |«      |«      «       ||j                  k7  rt!        d«      ‚|j                  }||k  rÑt        |«      D �cg c]  }t        j                  |«      ‘Œ }}t        j                  |z  t        t        j                  |«      Ž }t        t        j                  | j                   t        j                  |«      t        j                  |«      t        j
                  |«      t        j                  |«      |«      «       t        |«      D �	cg c]   }	||	   j                  j#                  d«      ‘Œ" c}	S c c}w c c}w c c}	w )z½Get the names of columns (features) in the Dataset.

        Returns
        -------
        feature_names : list of str
            The names of columns (features) in the Dataset.
        z0Cannot get feature_name before construct datasetr   éÿ   ú6Length of feature names doesn't equal with num_featurer”   )rÈ  r$   rP  r@   rA   Úc_size_tr�  r2  rõ   r  r3  rB   r   ÚLGBM_DatasetGetFeatureNamesrF   rG   r    r•   ©
rk   rP  r8  Úreserved_string_buffer_sizeÚrequired_string_buffer_sizer  Ústring_buffersÚptr_string_buffersÚactual_string_buffer_sizerC  s
             r5   r&  zDataset.get_feature_name�  sñ  € ð �<‰<ÐÜÐ RÓSÐSØ×&Ñ&Ó(ˆÜ—l‘l 1“oˆØ&)Ð#Ü&,§o¡o°aÓ&8Ð#Ü\aÐbmÓ\nÖoÐWXœ&×5Ñ5Ð6QÕRÐoˆÐoÜ$Ÿo™o°Ñ;¼cÄ&×BRÑBRÐTbÓ>cÐdÐÜÜ×,Ñ,Ø—‘Ü—‘˜[Ó)Ü—‘˜[Ó)Ü—‘Ð ;Ó<Ü—‘Ð8Ó9Ø"óô		
ð ˜+×+Ñ+Ò+ÜÐUÓVÐVØ$?×$EÑ$EÐ!à&Ð)BÒBÜ^cÐdoÓ^pÖqÐYZœf×9Ñ9Ð:SÕTÐqˆNÐqÜ"(§/¡/°KÑ"?Ä#Äf×FVÑFVÐXfÓBgÐ!hÐÜÜ×0Ñ0Ø—L‘LÜ—L‘L Ó-Ü—L‘L Ó-Ü—O‘OÐ$=Ó>Ü—L‘LÐ!<Ó=Ø&óô	ô BGÀ{ÓASÖT¸A�˜qÑ!×'Ñ'×.Ñ.¨wÕ7ÒTÐTùò; pùò" rùò Us   Á!IÅIÈ.%I c                 ó^   — | j                   €| j                  d«      | _         | j                   S )aë  Get the label of the Dataset.

        Returns
        -------
        label : list, numpy 1-D array, pandas Series / one-column DataFrame, pyarrow ChunkedArray, polars Series or None
            The label information from the Dataset.
            For a constructed ``Dataset``, this will only return a numpy array.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs
        rS  )rS  rE  r»  s    r5   rÝ  zDataset.get_labelÊ  s(   € ð �:‰:ÐØŸ™¨Ó0ˆDŒJØ�z‰zÐr4   c                 ó^   — | j                   €| j                  d«      | _         | j                   S )a  Get the weight of the Dataset.

        Returns
        -------
        weight : list, numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None
            Weight for each data point from the Dataset. Weights should be non-negative.
            For a constructed ``Dataset``, this will only return ``None`` or a numpy array.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs
        rT  )rT  rE  r»  s    r5   Ú
get_weightzDataset.get_weightÝ  s(   € ð �;‰;ÐØŸ.™.¨Ó2ˆDŒKØ�{‰{Ðr4   c                 ó^   — | j                   €| j                  d«      | _         | j                   S )av  Get the initial score of the Dataset.

        Returns
        -------
        init_score : list, list of lists (for multi-class task), numpy array, pandas Series, pandas DataFrame (for multi-class task), pyarrow ChunkedArray, pyarrow Table (for multi-class task), polars Series, polars DataFrame (for multi-class task) or None
            Init score of Booster.
            For a constructed ``Dataset``, this will only return ``None`` or a numpy array.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs
        rU  )rU  rE  r»  s    r5   Úget_init_scorezDataset.get_init_scoreð  s(   € ð �?‰?Ð"Ø"Ÿn™n¨\Ó:ˆDŒOØ�‰Ðr4   c                 ó(  — | j                   €t        d«      ‚| j                  �rL| j                  ��?| j                  ��2| j                  j
                  | _        | j
                  ��t        | j
                  t        j                  t        j                  j                  f«      r$| j
                  | j                  dd…f   | _        �n¡t        | j
                  t        «      r8| j
                  j                  | j                     j                  «       | _        �nOt        | j
                  t        «      r | j
                  | j                     | _        �nt!        j"                  | j
                  «      rUt        j$                  | j                  «      }t'        j(                  | j
                  «      |   j+                  «       | _        n¡t-        | j
                  «      r`t/        | j
                  «      dkD  rHt        j$                  t1        | j3                  | j
                  | j                  «      «      «      | _        n,t5        dt7        | j
                  «      j8                  › d�«       d| _        | j
                  €t;        d«      ‚| j
                  S )aÑ  Get the raw data of the Dataset.

        Returns
        -------
        data : str, pathlib.Path, numpy array, pandas DataFrame, scipy.sparse, Sequence, list of Sequence, list of numpy array, pyarrow Table, polars DataFrame, or None
            Raw data used in the Dataset construction.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs
        Nz(Cannot get data before construct Datasetr   zCannot subset z. type of raw data.
Returning original raw dataFzjCannot call `get_data` after freed raw data, set free_raw_data=False when construct Dataset to avoid this.)rÈ  r:  r{  rz  rw  r[   r¥   rR   r¦   rø  rù  r  r   Úilocr±   r&   rÿ  r   r®   r  r  Ú	to_nativerÁ   r§   rµ   rí  r�   rÌ   r/   r$   )rk   rG  s     r5   r%  zDataset.get_data  sÊ  € ð �<‰<ÐÜÐFÓGÐGØ×Ó × 1Ñ 1Ñ =À$Ç.Á.ÑB\ØŸ™×+Ñ+ˆDŒIØ�y‰yÑ$Ü˜dŸi™i¬"¯*©*´e·l±l×6KÑ6KÐ)LÔMØ $§	¡	¨$×*;Ñ*;ºQÐ*>Ñ ?�D–IÜ §	¡	¬<Ô8Ø $§	¡	§¡¨t×/@Ñ/@Ñ A× FÑ FÓ H�D–IÜ §	¡	¬8Ô4Ø $§	¡	¨$×*;Ñ*;Ñ <�D–IÜ×*Ñ*¨4¯9©9Ô5Ü Ÿh™h t×'8Ñ'8Ó9�GÜ "§¡¨t¯y©yÓ 9¸'Ñ B× LÑ LÓ N�D•IÜ*¨4¯9©9Ô5¼#¸d¿i¹i».È1Ò:LÜ "§¡¬¨d×.JÑ.JÈ4Ï9É9ÐVZ×VgÑVgÓ.hÓ)iÓ j�D•Iä Ø(¬¨d¯i©i«×)AÑ)AÐ(BÐBqÐrôð  %ˆDÔØ�9‰9ÐÜðPóð ð �y‰yÐr4   c                 ó¾   — | j                   €F| j                  d«      | _         | j                   �$t        j                  | j                   «      | _         | j                   S )a=  Get the group of the Dataset.

        Returns
        -------
        group : list, numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None
            Group/query data.
            Only used in the learning-to-rank task.
            sum(group) = n_samples.
            For example, if you have a 100-document dataset with ``group = [10, 20, 40, 10, 10, 10]``, that means that you have 6 groups,
            where the first 10 records are in the first group, records 11-30 are in the second group, records 31-70 are in the third group, etc.
            For a constructed ``Dataset``, this will only return ``None`` or a numpy array.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs
        rV  )rV  rE  rR   r!  r»  s    r5   Ú	get_groupzDataset.get_group-  sF   € ð& �:‰:ÐØŸ™¨Ó0ˆDŒJØ�z‰zÐ%äŸW™W T§Z¡ZÓ0�”
Ø�z‰zÐr4   c                 ó^   — | j                   €| j                  d«      | _         | j                   S )aK  Get the position of the Dataset.

        Returns
        -------
        position : numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None
            Position of items used in unbiased learning-to-rank task.
            For a constructed ``Dataset``, this will only return ``None`` or a numpy array.
        rW  )rW  rE  r»  s    r5   Úget_positionzDataset.get_positionG  s(   € ð �=‰=Ð Ø ŸN™N¨:Ó6ˆDŒMØ�}‰}Ðr4   c                 óê   — | j                   �]t        j                  d«      }t        t	        j
                  | j                   t        j                  |«      «      «       |j                  S t        d«      ‚)zœGet the number of rows in the Dataset.

        Returns
        -------
        number_of_rows : int
            The number of rows in the Dataset.
        r   z,Cannot get num_data before construct dataset)	rÈ  r@   rA   rB   r   ÚLGBM_DatasetGetNumDatarF   rG   r$   ©rk   rš   s     r5   r¾  zDataset.num_dataT  s\   € ð �<‰<Ð#Ü—,‘,˜q“/ˆCÜÜ×+Ñ+Ø—L‘LÜ—L‘L Ó%óôð —9‘9ÐäÐ NÓOÐOr4   c                 óê   — | j                   �]t        j                  d«      }t        t	        j
                  | j                   t        j                  |«      «      «       |j                  S t        d«      ‚)z»Get the number of columns (features) in the Dataset.

        Returns
        -------
        number_of_columns : int
            The number of columns (features) in the Dataset.
        r   z/Cannot get num_feature before construct dataset)	rÈ  r@   rA   rB   r   ÚLGBM_DatasetGetNumFeaturerF   rG   r$   rt  s     r5   rP  zDataset.num_featureh  s\   € ð �<‰<Ð#Ü—,‘,˜q“/ˆCÜÜ×.Ñ.Ø—L‘LÜ—L‘L Ó%óôð —9‘9ÐäÐ QÓRÐRr4   Úfeaturec           	      ón  — | j                   �Ÿt        |t        «      r| j                  j	                  |«      }n|}t        j                  d«      }t        t        j                  | j                   t        j                  |«      t        j                  |«      «      «       |j                  S t        d«      ‚)aF  Get the number of bins for a feature.

        .. versionadded:: 4.0.0

        Parameters
        ----------
        feature : int or str
            Index or name of the feature.

        Returns
        -------
        number_of_bins : int
            The number of constructed bins for the feature in the Dataset.
        r   z3Cannot get feature_num_bin before construct dataset)rÈ  r¥   rs   r  Úindexr@   rA   rB   r   ÚLGBM_DatasetGetFeatureNumBinrF   rG   r$   )rk   rw  Úfeature_indexrš   s       r5   Úfeature_num_binzDataset.feature_num_bin|  s�   € ð �<‰<Ð#Ü˜'¤3Ô'Ø $× 1Ñ 1× 7Ñ 7¸Ó @‘à '�Ü—,‘,˜q“/ˆCÜÜ×1Ñ1Ø—L‘LÜ—L‘L Ó/Ü—L‘L Ó%óôð —9‘9ÐäÐ UÓVÐVr4   Ú	ref_limitc                 óô   — | }t        «       }t        |«      |k  r]t        |t        «      r;|j	                  |«       |j
                  �|j
                  |vr|j
                  }n	 |S 	 |S t        |«      |k  rŒ]|S )aÂ  Get a chain of Dataset objects.

        Starts with r, then goes to r.reference (if exists),
        then to r.reference.reference, etc.
        until we hit ``ref_limit`` or a reference loop.

        Parameters
        ----------
        ref_limit : int, optional (default=100)
            The limit number of references.

        Returns
        -------
        ref_chain : set of Dataset
            Chain of references of the Datasets.
        )r  r§   r¥   r"   rÒ  rw  )rk   r}  ÚheadÚ	ref_chains       r5   rK  zDataset.get_ref_chainœ  s|   € ð" ˆÜ"%£%ˆ	Ü�)‹n˜yÒ(Ü˜$¤Ô(Ø—‘˜dÔ#Ø—N‘NÐ.°T·^±^È9Ñ5TØŸ>™>‘Dàð Ðð ØÐô �)‹n˜yÓ(ð Ðr4   c                 ó²	  — | j                   �|j                   €t        d«      ‚t        t        j                  | j                   |j                   «      «       | j
                  du }t        | j
                  «      j                  }|j
                  €	d| _        �nÊ| j
                  ��½t        | j
                  t        j                  «      �r#t        |j
                  t        j                  «      r2t        j                  | j
                  |j
                  f«      | _        �nBt        |j
                  t        j                  j                  «      r@t        j                  | j
                  |j
                  j                  «       f«      | _        �nÔt        |j
                  t         «      r<t        j                  | j
                  |j
                  j"                  f«      | _        �n~d| _        �nut        | j
                  t        j                  j                  «      �r| j
                  j%                  «       }t        |j
                  t        j                  t        j                  j                  f«      r>t        j                  j                  | j
                  |j
                  f|¬«      | _        �n°t        |j
                  t         «      rHt        j                  j                  | j
                  |j
                  j"                  f|¬«      | _        �nNd| _        �nEt        | j
                  t         «      �r#t&        st)        d«      ‚t        |j
                  t        j                  «      r3t+        | j
                  t!        |j
                  «      fdd¬«      | _        nÂt        |j
                  t        j                  j                  «      rAt+        | j
                  t!        |j
                  j                  «       «      fdd¬«      | _        nSt        |j
                  t         «      r*t+        | j
                  |j
                  fdd¬«      | _        nd| _        nd| _        | j
                  €:dt        |j
                  «      j                  › d	|› d
�}||rdndz  }t-        |«       | j/                  «       | _        t-        d«       d| _        d| _        | S )a^  Add features from other Dataset to the current Dataset.

        Both Datasets must be constructed before calling this method.

        Parameters
        ----------
        other : Dataset
            The Dataset to take features from.

        Returns
        -------
        self : Dataset
            Dataset with the new features added.
        NzJBoth source and target Datasets must be constructed before adding features)ÚformatztCannot add features to DataFrame type of raw data without pandas installed. Install pandas and restart your session.r   T)ÚaxisÚignore_indexzCannot add features from z type of raw data to z type of raw data.
z<Set free_raw_data=False when construct Dataset to avoid thiszFreeing raw datazkResetting categorical features.
You can set new categorical features via ``set_categorical_feature`` methodr„  )rÈ  r    rB   r   ÚLGBM_DatasetAddFeaturesFromr[   rÌ   r/   r¥   rR   r¦   Úhstackrø  rù  r  Útoarrayr   rÚ   Ú	getformatr   r$   r   r�   r&  r  r€  r�  )rk   ÚotherÚwas_noneÚold_self_data_typeÚsparse_formatÚerr_msgs         r5   Úadd_features_fromzDataset.add_features_fromº  s\  € ð �<‰<Ð 5§=¡=Ð#8ÜÐiÓjÐjÜÜ×,Ñ,Ø—‘Ø—‘óô	
ð —9‘9 Ð$ˆÜ! $§)¡)›_×5Ñ5ÐØ�:‰:ÐØˆDŽIØ�Y‰YÑ"Ü˜$Ÿ)™)¤R§Z¡ZÕ0Ü˜eŸj™j¬"¯*©*Ô5Ü "§	¡	¨4¯9©9°e·j±jÐ*AÓ B�D–IÜ §
¡
¬E¯L©L×,AÑ,AÔBÜ "§	¡	¨4¯9©9°e·j±j×6HÑ6HÓ6JÐ*KÓ L�D–IÜ §
¡
¬LÔ9Ü "§	¡	¨4¯9©9°e·j±j×6GÑ6GÐ*HÓ I�D–Ià $�D–IÜ˜DŸI™I¤u§|¡|×'<Ñ'<Õ=Ø $§	¡	× 3Ñ 3Ó 5�Ü˜eŸj™j¬2¯:©:´u·|±|×7LÑ7LÐ*MÔNÜ %§¡× 3Ñ 3°T·Y±YÀÇ
Á
Ð4KÐTaÐ 3Ó b�D–IÜ §
¡
¬LÔ9Ü %§¡× 3Ñ 3°T·Y±YÀÇ
Á
×@QÑ@QÐ4RÐ[hÐ 3Ó i�D–Ià $�D–IÜ˜DŸI™I¤|Õ4Ý'Ü'ðCóð ô
 ˜eŸj™j¬"¯*©*Ô5Ü &¨¯	©	´<ÀÇ
Á
Ó3KÐ'LÐSTÐcgÔ h�D•IÜ §
¡
¬E¯L©L×,AÑ,AÔBÜ &¨¯	©	´<ÀÇ
Á
×@RÑ@RÓ@TÓ3UÐ'VÐ]^ÐmqÔ r�D•IÜ §
¡
¬LÔ9Ü &¨¯	©	°5·:±:Ð'>ÀQÐUYÔ Z�D•Ià $�D•Ià �”	Ø�9‰9Ðà+¬D°·±Ó,<×,EÑ,EÐ+FÐF[Ø%Ð&Ð&:ð<ð ð ÙRZÑNÐ`rñˆGô ˜Ô!Ø ×1Ñ1Ó3ˆÔÜðZô	
ð $*ˆÔ Ø"&ˆÔØˆr4   c           
      ó˜   — t        t        j                  | j                  «       j                  t        t        |«      «      «      «       | S )aK  Save Dataset to a text file.

        This format cannot be loaded back in by LightGBM, but is useful for debugging purposes.

        Parameters
        ----------
        filename : str or pathlib.Path
            Name of the output file.

        Returns
        -------
        self : Dataset
            Returns self.
        )rB   r   ÚLGBM_DatasetDumpTextrÔ  rÈ  rE   rs   r0  s     r5   Ú
_dump_textzDataset._dump_text
  s=   € ô 	Ü×%Ñ%Ø—‘Ó ×(Ñ(Ü”s˜8“}Ó%óô	
ð ˆr4   )
NNNNNr„  r„  NTNro  )r7   r"   )NNNNNNr9   )rw  r"   r7   r"   )éd   )r‰  r"   r7   r"   )Wr/   r0   r1   r2   Ú_LGBM_TrainDataTyper   Ú_LGBM_LabelTypeÚ_LGBM_WeightTypeÚ_LGBM_GroupTypeÚ_LGBM_InitScoreTypeÚ_LGBM_FeatureNameConfigurationÚ%_LGBM_CategoricalFeatureConfigurationr   rs   r   rq  Ú_LGBM_PositionTyperÍ  rÝ  rÀ  rR   r¦   rˆ  Ú_DatasetHandlerŒ  r   r›  rŸ  r„  r‚  rÃ  r   rÄ  rÏ  rI  r&   r   r   rí  r   rü  rÛ  rØ  rÚ  rø  rù  rú  rÖ  rü  r×  r  ru  rÙ  r   r  rÔ  r*  r,  r   r1  r!  r6  Ú_LGBM_SetFieldTyper?  rE  rG  rI  rM  rá  rÜ  rÞ  rÀ  rß  rà  r&  rÝ  rh  rj  r%  ro  rq  r¾  rP  r|  rK  rŽ  r‘  r3   r4   r5   r"   r"   ¤  sã  „ ñð ,0Ø)-Ø-1Ø+/Ø48Ø7=ØEKØ+/Ø"Ø15ñs:à!ðs:ð ˜Ñ(ðs:ð ˜IÑ&ð	s:ð
 Ð)Ñ*ðs:ð ˜Ñ(ðs:ð Ð0Ñ1ðs:ð 5ðs:ð Cðs:ð ˜˜c 3˜h™Ñ(ðs:ð ðs:ð Ð-Ñ.ós:ójð °Cð  ¸B¿J¹Jó  ðDàðð $ðð 
ó	ð:>à˜"Ÿ*™*Ñ%ð>ð ˜RŸZ™ZÑ(ð>ð ð	>ð
 ð>ð 
ó>ð@˜rŸz™zð ¨ió ð<#˜D  c ™Nó #óJð)à˜OÑ,ð)ð "ð)ð ˜u T¨#¡Y°·
±
Ð%:Ñ;Ñ<ð	)ð
 
ó)ðV3àÐ*Ñ+ð3ð ˜Ñ(ð3ð ˜IÑ&ð	3ð
 Ð)Ñ*ð3ð ˜Ñ(ð3ð Ð0Ñ1ð3ð ˜OÑ,ð3ð 5ð3ð Cð3ð ˜˜c 3˜h™Ñ(ð3ð Ð-Ñ.ð3ð 
ó3ðB ð> d¨8¡nð >¸xÈ¹}ð >ÐQYÐZ\×ZdÑZdÑQeò >ó ð>ð&  X¡ð &¸Cð &ÀEÈ$ÈrÏzÉzÑJZÐ\`Ðac×akÑakÑ\lÐJlÑDmó &ð8 ð �8‰nð ð ˜nÑ-ð	 ð
 
ó ðDð �Z‰Zðð ð	ð
 ˜nÑ-ðð 
óð85ð �2—:‘:Ñð5ð ð	5ð
 ˜nÑ-ð5ð 
ó5ðn!ð �\‰\×$Ñ$ð!ð ð	!ð
 ˜nÑ-ð!ð 
ó!ðF!ð �\‰\×$Ñ$ð!ð ð	!ð
 ˜nÑ-ð!ð 
ó!ðFð �l‰lðð ð	ð
 ˜nÑ-ðð 
óð. ð à�S˜#�X‘ð ð ˜3 ˜8‘nð ð ˜‘Xð	 ð
 
ò ó ð óD]ðD ,0Ø-1Ø+/Ø48Ø+/Ø15ñWà!ðWð ˜Ñ(ðWð Ð)Ñ*ð	Wð
 ˜Ñ(ðWð Ð0Ñ1ðWð ˜˜c 3˜h™Ñ(ðWð Ð-Ñ.ðWð 
óWðx ,0ñ à˜3‘ið ð ˜˜c 3˜h™Ñ(ð ð 
ó	 ðD E¨#¨t¨)Ñ$4ð ¸ó ð4 X¨d°3¸°8©nÑ%=ð À)ó ó8ð^àð^ð Ð)Ñ*ð^ð 
ó	^ð@; Cð ;¨H°R·Z±ZÑ,@ó ;ðz$àBð$ð 
ó$ðL%à˜OÑ,ð%ð 
ó%óNð8Ð-Kð ÐPYó ð>˜x¨Ñ8ð ¸Yó ðB%àÐ)Ñ*ð%ð 
ó%ðNàÐ0Ñ1ðð 
óð8#à˜Ñ(ð#ð 
ó#ðJàÐ-Ñ.ðð 
óð0+U $ s¡)ó +UðZ˜8 OÑ4ó ð&˜HÐ%5Ñ6ó ð& Ð)<Ñ =ó ð&(˜(Ð#6Ñ7ó (ðT˜8 OÑ4ó ð4˜hÐ'9Ñ:ó ðP˜#ó Pð(S˜Só Sð(W u¨S°#¨X¡ð W¸3ó Wñ@ sð °S¸±^ó ó<Nð` 5¨¨d¨Ñ#3ð ¸	ô r4   r"   c                   ór   — e Zd ZU dZeed<   eed<   eed<   eed<   dZe	e   ed<   de
fd	„Zdefd
„Zdefd„Zy)Ú
EvalResulta‘  
    Result from computing an evaluation metric on a dataset.

    In ``lightgbm<4.7.0``, evaluation results were stored in tuples like this:

      * train(): ``(dataset_name, metric_name, metric_value, maximize)``
      * cv(): ``(dataset_name, metric_name, mean(metric_value), maximize, std_dev(metric_value))``

    Parameters
    ----------
    dataset_name : str
        Unique identifier for the dataset this result was computed on.
    metric_name : str
        Unique identifier for the metric (e.g. "rmse").
    metric_value : float
        Value of the evaluation metric.
    maximize : bool
        Are higher values better? e.g. ``True`` for AUC and ``False`` for binary error.
    metric_std_dev : float or None
        If not ``None``, the standard deviation of metric values computed over a range of results.
        For example, used when aggregating over cross-validation folds in ``cv()``.
    Údataset_nameÚmetric_nameÚmetric_valueÚmaximizeNÚmetric_std_devr7   c                 ó&   — | j                  «       syy)Né   é   )Úis_cv_resultr»  s    r5   r¼  zEvalResult.__len__P  s   € Ø× Ñ Ô"Øàr4   c              #   óŒ   K  — d}|t        | «      k  r0t        | | j                  |   «      –— |dz  }|t        | «      k  rŒ/y y ­w)Nr   r   )r§   ry   Ú_fields)rk   rC  s     r5   Ú__iter__zEvalResult.__iter__V  sA   è ø€ ØˆØ”#�d“)ŠmÜ˜$ §¡¨Q¡Ó0Ò0Ø�‰FˆAð ”#�d“)�mùs   ‚?AÁAc                 ó   — | j                   duS )zî
        Whether the result was created by ``cv()``.

        If ``True``:

          * ``metric_value`` = mean of ``metric_name`` over CV folds
          * ``metric_std_dev`` = standard deviation of ``metric_name`` over CV folds
        N)r£  r»  s    r5   r§  zEvalResult.is_cv_result\  s   € ð ×"Ñ"¨$Ð.Ð.r4   )r/   r0   r1   r2   rs   Ú__annotations__rŸ   rq  r£  r   rÀ  r¼  r   rª  r§  r3   r4   r5   rž  rž  2  sR   … ñð. ÓØÓØÓØƒNØ&*€N�H˜U‘OÓ*ð˜ó ð˜#ó ð	/˜dô 	/r4   rž  c                   ó°  — e Zd ZdZ	 	 	 	 d]deeeef      dee   dee	ee
f      dee   fd„Zd^d	„Zd_d
„Zdededd fd„Zdeeef   fd„Zdeeef   ddfd„Zdeeef   fd„Zd_d„Zd_d„Z	 	 	 d`de	ee   ee   ef   dedededd f
d„Zd_d„Zdefd„Zdedd fd„Zdededd fd„Zdeeef   dd fd„Z	 	 dadee   d ee   defd!„Z d"e!jD                  d#e!jD                  defd$„Z#d_d%„Z$defd&„Z%defd'„Z&defd(„Z'de(fd)„Z)de(fd*„Z*	 dbdeded+ee	e+ee+   f      dee,   fd,„Z-	 dbd+ee	e+ee+   f      dee,   fd-„Z.	 dbd+ee	e+ee+   f      dee,   fd.„Z/	 	 	 dcd/e	ee
f   d0ee   d1ed2edd f
d3„Z0	 	 ddd1ed4edd fd5„Z1dedd fd6„Z2	 	 	 dcd0ee   d1ed2edefd7„Z3	 	 	 	 ded0ee   d1ed2ed8ee4eeef   geeef   f      deeef   f
d9„Z5	 	 	 	 	 	 	 dfde6d1ed0ee   d:ed;ed<ed=ed>edede7fd?„Z8	 	 	 	 	 	 	 	 	 	 dgde9d@e:dAe(dBee   dCee;   dDee<   dEee=   dFe>dGe?dHeeeef      dIed>ededd fdJ„Z@dKedLede(fdM„ZAdKedLedNe(dd fdO„ZBdefdP„ZCdee   fdQ„ZD	 	 dhd2edRee   de!jD                  fdS„ZE	 	 didTe	eef   dUee	eef      dVede	eFe!jD                  e!jD                  f   e!jD                  ef   fdW„ZGdXedYed+ee	e+ee+   f      dee,   fdZ„ZHdYede!jD                  fd[„ZId^d\„ZJy)jr!   zBooster in LightGBM.Nr>   Ú	train_setrÔ  r¥  c           	      óÆ  — t        j                  «       | _        d| _        d| _        d| _        d| _        d| _        i | _        |€i n
t        |«      }|��¸t        |t        «      s!t        dt        |«      j                  › �«      ‚t        d|d¬«      }|d   €|j!                  dd«       nµ|d   }t        |t"        «      rt%        |j'                  d	«      «      }n>t        |t(        t*        f«      rt%        |«      }d	j-                  |«      }nt/        d
«      ‚t        d||¬«      }t        d|d¬«      }| j1                  ||d   |j3                  dd«      |d   ¬«       |j5                  «        |j7                  |j9                  «       «       t;        |«      }t=        t?        j@                  |j                  tC        |«      t        jD                  | j                  «      «      «       || _#        g | _$        g | _%        d| _&        |jN                  | _(        | jP                  �=t=        t?        jR                  | j                  | jP                  j                  «      «       t        jT                  d«      }t=        t?        jV                  | j                  t        jD                  |«      «      «       |jX                  | _-        dg| _.        dg| _/        | ja                  «        |jb                  | _1        |jd                  | _3        || _9        y|��t        jT                  d«      }	t=        t?        jh                  tC        t#        |«      «      t        jD                  |	«      t        jD                  | j                  «      «      «       t        jT                  d«      }t=        t?        jV                  | j                  t        jD                  |«      «      «       |jX                  | _-        tk        |¬«      | _1        |rtm        d«       | jo                  «       }|| _9        y|�6| jq                  |«       |rtm        d«       | jo                  «       }|| _9        yt        d«      ‚)aÕ  Initialize the Booster.

        Parameters
        ----------
        params : dict or None, optional (default=None)
            Parameters for Booster.
        train_set : Dataset or None, optional (default=None)
            Training dataset.
        model_file : str, pathlib.Path or None, optional (default=None)
            Path to the model file.
        model_str : str or None, optional (default=None)
            Model will be loaded from this string.
        FTÚtrainingrŠ  Nú.Training data should be Dataset instance, met Úmachines©rK  r>   rL  r  zInvalid machines in params.Únum_machinesÚlocal_listen_portép0  Útime_outéx   )r²  rµ  Úlisten_time_outr´  r   r   rÖ  z;Ignoring params argument, using parameters from model file.z=Ignoring params argument, using parameters from model string.z[Need at least one training dataset or model file or model string to create Booster instance):r@   rÖ   rÈ  Ú_networkÚ_Booster__need_reload_eval_infoÚ_train_data_nameÚ_Booster__set_objective_to_noneÚbest_iterationÚ
best_scorer   r¥   r"   r~   rÌ   r/   rR  rO  rs   r§   rX  rµ   r  r†   r    Úset_networkrD  rÔ  r@  r„  r  rB   r   ÚLGBM_BoosterCreaterE   rF   r®  Ú
valid_setsÚname_valid_setsÚ_Booster__num_datasetr|  Ú_Booster__init_predictorÚLGBM_BoosterMergerA   rÊ  rG   Ú_Booster__num_classÚ_Booster__inner_predict_bufferÚ_Booster__is_predicted_cur_iterÚ_Booster__get_eval_infor�  r~  Útrain_set_versionr×  r´  r�   Ú_get_loaded_paramÚmodel_from_stringr>   )
rk   r>   r®  rÔ  r¥  r²  Únum_machines_from_machine_listrš  rÌ  rØ  s
             r5   rÍ  zBooster.__init__k  sØ  € ô( —‘Ó(ˆŒØˆŒØ'+ˆÔ$Ø *ˆÔØ',ˆÔ$Ø ˆÔØ68ˆŒØ�~‘¬8°FÓ+;ˆØÑ ä˜i¬Ô1ÜÐ"PÔQUÐV_ÓQ`×QiÑQiÐPjÐ kÓlÐlÜ(Ø *ØØ"ôˆFð �jÑ!Ð)Ø—
‘
˜: tÕ,à! *Ñ-�Ü˜h¬Ô,Ü58¸¿¹ÈÓ9LÓ5MÑ2Ü ¬4´¨+Ô6Ü58¸³]Ð2Ø"Ÿx™x¨Ó1‘Hä$Ð%BÓCÐCä,Ø$2Ø!Ø"@ô�ô
 -Ø$7Ø!Ø"'ô�ð
 × Ñ Ø%Ø&,Ð-@Ñ&AØ$*§J¡J¨z¸3Ó$?Ø!'¨Ñ!7ð	 !ô ð ×ÑÔ!à�M‰M˜)×.Ñ.Ó0Ô1Ü+¨FÓ3ˆJÜÜ×'Ñ'Ø×%Ñ%Ü˜:Ó&Ü—L‘L §¡Ó.óôð 'ˆDŒNØ-/ˆDŒOØ.0ˆDÔ Ø!"ˆDÔØ$-×$8Ñ$8ˆDÔ!Ø×$Ñ$Ð0ÜÜ×*Ñ*ØŸ™Ø×-Ñ-×5Ñ5óôô #ŸL™L¨›OˆMÜÜ×.Ñ.Ø—L‘LÜ—L‘L Ó/óôð  -×2Ñ2ˆDÔàGKÀfˆDÔ'Ø,1¨7ˆDÔ(Ø× Ñ Ô"Ø&/×&BÑ&BˆDÔ#Ø%.×%6Ñ%6ˆDÔ"ð@ ˆ�ð? Ñ#ä!'§¡¨a£ÐÜÜ×4Ñ4Üœ3˜z›?Ó+Ü—L‘LÐ!3Ó4Ü—L‘L §¡Ó.óôô #ŸL™L¨›OˆMÜÜ×.Ñ.Ø—L‘LÜ—L‘L Ó/óôð  -×2Ñ2ˆDÔÜ&>ÈÔ&TˆDÔ#ÙÜÐZÔ[Ø×+Ñ+Ó-ˆFð ˆ�ð Ð"Ø×"Ñ" 9Ô-ÙÜÐ\Ô]Ø×+Ñ+Ó-ˆFð
 ˆ�ô Ømóð r4   r7   c                 óæ   — 	 | j                   r| j                  «        	 | j                  �)t	        t        j                  | j                  «      «       y y # t        $ r Y ŒBw xY w# t        $ r Y y w xY wr9   )rº  Úfree_networkrÜ  rÈ  rB   r   rÛ  r»  s    r5   rÝ  zBooster.__del__õ  sl   € ð	Ø�}Š}Ø×!Ñ!Ô#ð	Ø�|‰|Ð'Üœ4×0Ñ0°·±Ó>Õ?ð (øô ò 	Ùð	ûô
 ò 	Ùð	ús"   ‚A Ÿ4A$ Á	A!Á A!Á$	A0Á/A0c                 ó$   — | j                  d «      S r9   )Ú__deepcopy__r»  s    r5   Ú__copy__zBooster.__copy__  s   € Ø× Ñ  Ó&Ð&r4   r=  Úkwargsc                 ó>   — | j                  d¬«      }t        |¬«      S )NrŠ  ©rä  ©r¥  )Úmodel_to_stringr!   )rk   r=  rÔ  r¥  s       r5   rÒ  zBooster.__deepcopy__  s    € Ø×(Ñ(°rÐ(Ó:ˆ	Ü Ô+Ð+r4   c                 óº   — | j                   j                  «       }|d   }|j                  dd «       |j                  dd «       |�| j                  d¬«      |d<   |S )NrÈ  r®  rÂ  rŠ  rÖ  )rà  r±   rO  rØ  )rk   rá  rß  s      r5   râ  zBooster.__getstate__  s[   € Ø�}‰}×!Ñ!Ó#ˆØ�i‘ˆØ�‰�˜dÔ#Ø�‰�˜tÔ$ØÐØ"×2Ñ2ÀÐ2ÓDˆD�‰OØˆr4   Ústatec           	      ó|  — |j                  d|j                  dd «      «      }|�}t        j                  «       }t        j                  d«      }t	        t        j                  t        |«      t        j                  |«      t        j                  |«      «      «       ||d<   | j                  j                  |«       y )NrÈ  rß  r   )rD  r@   rÖ   rA   rB   r   ÚLGBM_BoosterLoadModelFromStringrE   rF   rà  r@  )rk   rÚ  r¥  rß  rØ  s        r5   Ú__setstate__zBooster.__setstate__  s’   € Ø—I‘I˜i¨¯©°8¸TÓ)BÓCˆ	ØÐ Ü—_‘_Ó&ˆFÜ!'§¡¨a£ÐÜÜ×4Ñ4Ü˜9Ó%Ü—L‘LÐ!3Ó4Ü—L‘L Ó(óôð  &ˆE�)ÑØ�‰×Ñ˜UÕ#r4   c           	      óæ  — d}t        j                  d«      }t        j                  |«      }t        j                  t        j                  |«      «      }t        t        j                  | j                  t        j                  |«      t        j                  |«      |«      «       |j                  }||kD  rŽt        j                  |«      }t        j                  t        j                  |«      «      }t        t        j                  | j                  t        j                  |«      t        j                  |«      |«      «       t        j                  |j                  j                  d«      «      S )Nr*  r   r”   )r@   rñ   r2  rõ   r3  rB   r   ÚLGBM_BoosterGetLoadedParamrÈ  rF   rG   r5  r6  r•   )rk   r7  r8  r9  r:  r;  s         r5   rÌ  zBooster._get_loaded_param   s  € Øˆ
Ü—n‘n QÓ'ˆÜ×3Ñ3°JÓ?ˆÜ"ŸO™O¬F×,<Ñ,<¸]Ó,KÓLÐÜÜ×+Ñ+Ø—‘Ü—‘˜zÓ*Ü—‘˜[Ó)Ø!ó	ô	
ð !×&Ñ&ˆ
à˜
Ò"Ü"×7Ñ7¸
ÓCˆMÜ &§¡´×0@Ñ0@ÀÓ0OÓ PÐÜÜ×/Ñ/Ø—L‘LÜ—N‘N :Ó.Ü—L‘L Ó-Ø%ó	ôô �z‰z˜-×-Ñ-×4Ñ4°WÓ=Ó>Ð>r4   c                 ó„   — | j                   j                  dd«       | j                   j                  dd«       d| _        | S )zFree Booster's Datasets.

        Returns
        -------
        self : Booster
            Booster without Datasets.
        r®  NrÂ  r   )rà  rO  rÄ  r»  s    r5   Úfree_datasetzBooster.free_dataset<  s9   € ð 	�‰×Ñ˜+ tÔ,Ø�‰×Ñ˜,¨Ô-ØˆÔØˆr4   c                 ó"   — g | _         g | _        | S r9   )rÈ  rÉ  r»  s    r5   Ú_free_bufferzBooster._free_bufferI  s   € Ø&(ˆÔ#Ø')ˆÔ$Øˆr4   r²  rµ  r¹  r´  c           
      ó(  — t        |t        t        f«      rdj                  |«      }t	        t        j                  t        |«      t        j                  |«      t        j                  |«      t        j                  |«      «      «       d| _
        | S )a1  Set the network configuration.

        Parameters
        ----------
        machines : list, set or str
            Names of machines.
        local_listen_port : int, optional (default=12400)
            TCP listen port for local machines.
        listen_time_out : int, optional (default=120)
            Socket time-out in minutes.
        num_machines : int, optional (default=1)
            The number of machines for distributed learning application.

        Returns
        -------
        self : Booster
            Booster with set network.
        r  T)r¥   rµ   r  r†   rB   r   ÚLGBM_NetworkInitrE   r@   rA   rº  )rk   r²  rµ  r¹  r´  s        r5   rÀ  zBooster.set_networkN  sq   € ô2 �h¤¤s Ô,Ø—x‘x Ó)ˆHÜÜ×!Ñ!Ü�xÓ Ü—‘Ð.Ó/Ü—‘˜_Ó-Ü—‘˜\Ó*ó	ô	
ð ˆŒØˆr4   c                 óN   — t        t        j                  «       «       d| _        | S )z€Free Booster's network.

        Returns
        -------
        self : Booster
            Booster with freed network.
        F)rB   r   ÚLGBM_NetworkFreerº  r»  s    r5   rÐ  zBooster.free_networkt  s!   € ô 	”4×(Ñ(Ó*Ô+ØˆŒØˆr4   c                 ó  ‡‡‡— t         st        d«      ‚| j                  «       dk(  rt        d«      ‚dt        t        t
        f   dt        fd„Š	 	 	 	 ddt        t        t
        f   dt        dt        t           d	t        t        t              d
t        t           dt        t        t
        f   fˆfd„Š	 	 	 	 ddt        t        t
        f   dt        dt        t           d	t        t        t              d
t        t           dt        t        t        t
        f      fˆˆˆfd„Š| j                  «       }|d	   }g }|d   D ]"  }|j                   ‰|d   |d   |¬«      «       Œ$ t        ||d   j                  «       ¬«      S )aÚ  Parse the fitted model and return in an easy-to-read pandas DataFrame.

        The returned DataFrame has the following columns.

            - ``tree_index`` : int64, which tree a node belongs to. 0-based, so a value of ``6``, for example, means "this node is in the 7th tree".
            - ``node_depth`` : int64, how far a node is from the root of the tree. The root node has a value of ``1``, its direct children are ``2``, etc.
            - ``node_index`` : str, unique identifier for a node.
            - ``left_child`` : str, ``node_index`` of the child node to the left of a split. ``None`` for leaf nodes.
            - ``right_child`` : str, ``node_index`` of the child node to the right of a split. ``None`` for leaf nodes.
            - ``parent_index`` : str, ``node_index`` of this node's parent. ``None`` for the root node.
            - ``split_feature`` : str, name of the feature used for splitting. ``None`` for leaf nodes.
            - ``split_gain`` : float64, gain from adding this split to the tree. ``NaN`` for leaf nodes.
            - ``threshold`` : float64, value of the feature used to decide which side of the split a record will go down. ``NaN`` for leaf nodes.
            - ``decision_type`` : str, logical operator describing how to compare a value to ``threshold``.
              For example, ``split_feature = "Column_10", threshold = 15, decision_type = "<="`` means that
              records where ``Column_10 <= 15`` follow the left side of the split, otherwise follows the right side of the split. ``None`` for leaf nodes.
            - ``missing_direction`` : str, split direction that missing values should go to. ``None`` for leaf nodes.
            - ``missing_type`` : str, describes what types of values are treated as missing.
            - ``value`` : float64, predicted value for this leaf node, multiplied by the learning rate.
            - ``weight`` : float64 or int64, sum of Hessian (second-order derivative of objective), summed over observations that fall in this node.
            - ``count`` : int64, number of records in the training data that fall into this node.

        Returns
        -------
        result : pandas DataFrame
            Returns a pandas DataFrame of the parsed model.
        zxThis method cannot be run without pandas installed. You must install pandas and restart your session to use this method.r   z<There are no trees in this Booster and thus nothing to parseÚtreer7   c                 ó&   — d| j                  «       v S )NÚsplit_index)rN  ©ré  s    r5   Ú_is_split_nodez2Booster.trees_to_dataframe.<locals>._is_split_node¥  s   € Ø  D§I¡I£KÐ/Ð/r4   Ú
node_depthÚ
tree_indexÚfeature_namesÚparent_nodec                 óî  •— dt         t        t        f   dt        t           dt        fˆ	fd„}dt         t        t        f   dt        t
        t              dt        t           fˆ	fd„}dt         t        t        f   dt        fd„}t        «       }||d<   ||d<    || |«      |d	<   d |d
<   d |d<   ||d<    || |¬«      |d<   d |d<   d |d<   d |d<   d |d<   d |d<   d |d<   d |d<   d |d<    ‰	| «      rd || d
   |«      |d
<    || d   |«      |d<   | d   |d<   | d   |d<   | d   |d<   | d   rdnd|d<   | d   |d<   | d   |d<   | d   |d<   | d   |d<   |S | d   |d<    || «      s| d   |d<   | d   |d<   |S ) Nré  rï  r7   c                 ón   •— |�|› d�nd} ‰| «      }|rdnd}| j                  |rdndd«      }|› |› |› �S )Nú-r„   ÚSÚLrë  Ú
leaf_indexr   )rD  )ré  rï  Útree_numÚis_splitÚ	node_typeÚnode_numrí  s         €r5   Ú_get_node_indexzOBooster.trees_to_dataframe.<locals>.create_node_record.<locals>._get_node_index¯  sS   ø€ ð 0:Ð/E˜j˜\¨Ñ+È2�Ù)¨$Ó/�Ù#+™C°�	àŸ8™8±X¡MÀ<ÐQRÓS�Ø"˜ I ;¨x¨jÐ9Ð9r4   rð  c                 óB   •—  ‰| «      r|�
|| d      }|S | d   }|S d }|S )NÚsplit_featurer3   )ré  rð  r  rí  s      €r5   Ú_get_split_featurezRBooster.trees_to_dataframe.<locals>.create_node_record.<locals>._get_split_featureº  sK   ø€ ñ
 " $Ô'Ø$Ð0Ø'4°T¸/Ñ5JÑ'K˜ð
 $Ð#ð (,¨OÑ'<˜ð $Ð#ð $(�LØ#Ð#r4   c                 ó>   — t        | j                  «       «      ddhk(  S )NÚ
leaf_valueÚ
leaf_count)r  rN  rì  s    r5   Ú_is_single_node_treezTBooster.trees_to_dataframe.<locals>.create_node_record.<locals>._is_single_node_treeÈ  s   € Ü˜4Ÿ9™9›;Ó'¨L¸,Ð+GÑGÐGr4   rî  Ú
node_indexÚ
left_childÚright_childÚparent_index)ré  rð  rþ  Ú
split_gainÚ	thresholdÚdecision_typeÚmissing_directionÚmissing_typerG   rT  ÚcountÚdefault_leftÚleftÚrightÚinternal_valueÚinternal_weightÚinternal_countr  Úleaf_weightr  )r   rs   r   r   rÀ  r   rq  r   )
ré  rî  rï  rð  rñ  rü  rÿ  r  Únoderí  s
            €r5   Úcreate_node_recordz6Booster.trees_to_dataframe.<locals>.create_node_record¨  s#  ø€ ð	:Üœ3¤˜8‘nð	:ä$¤S™Mð	:ô õ	:ð$äœ3¤˜8‘nð$ô  (¬¬S©	Ñ2ð$ô œ#‘õ	$ðH¬4´´S°©>ð H¼dó Hô 6A³]ˆDØ!+ˆD�ÑØ!+ˆD�ÑÙ!0°°zÓ!BˆD�ÑØ!%ˆD�ÑØ"&ˆD�ÑØ#.ˆD�Ñ Ù$6¸DÐP]Ô$^ˆD�Ñ!Ø!%ˆD�ÑØ $ˆD�ÑØ$(ˆD�Ñ!Ø(,ˆDÐ$Ñ%Ø#'ˆD�Ñ Ø ˆD�‰MØ!ˆD�‰NØ ˆD�‰Mñ ˜dÔ#Ù%4°T¸,Ñ5GÈÓ%T��\Ñ"Ù&5°d¸=Ñ6IÈ:Ó&V��]Ñ#Ø%)¨,Ñ%7��\Ñ"Ø$(¨Ñ$5��[Ñ!Ø(,¨_Ñ(=��_Ñ%Ø6:¸>Ò6J©FÐPW�Ð(Ñ)Ø'+¨NÑ';��^Ñ$Ø $Ð%5Ñ 6��W‘Ø!%Ð&7Ñ!8��X‘Ø $Ð%5Ñ 6��W‘ð ˆKð !% \Ñ 2��W‘Ù+¨DÔ1Ø%)¨-Ñ%8�D˜‘NØ$(¨Ñ$6�D˜‘MàˆKr4   c           	      óœ   •—  ‰| ||||¬«      }|g} ‰
| «      r2ddg}|D ])  } ‰| |   |dz   |||d   ¬«      }	|j                  |	«       Œ+ |S )N)ré  rî  rï  rð  rñ  r  r  r   r  )Úextend)ré  rî  rï  rð  rñ  r  ÚresÚchildrenÚchildÚsubtree_listrí  r  Útree_dict_to_node_lists             €€€r5   r  z:Booster.trees_to_dataframe.<locals>.tree_dict_to_node_listñ  sƒ   ø€ ñ &ØØ%Ø%Ø+Ø'ôˆDð �&ˆCá˜dÔ#à(¨-Ð8�Ø%ò 
-�EÙ#9Ø! %™[Ø#-°¡>Ø#-Ø&3Ø$(¨Ñ$6ô$�Lð —J‘J˜|Õ,ð
-ð ˆJr4   Ú	tree_infoÚtree_structure)ré  rï  rð  ©rŒ  )r   NNN)r   r$   Ú	num_treesr   rs   r   rq  rÀ  r   r   Ú
dump_modelr  r   rN  )rk   Ú
model_dictrð  Ú
model_listré  rí  r  r  s        @@@r5   Útrees_to_dataframezBooster.trees_to_dataframe€  s¯  ú€ õ8  ÜðWóð ð
 �>‰>Ó˜qÒ ÜÐ ^Ó_Ð_ð	0¤¤c¬3 h¡ð 	0´Dó 	0ð
  Ø(,Ø15Ø)-ñG	Ü”sœC�x‘.ðG	äðG	ô !¤™ðG	ô $¤D¬¡IÑ.ð	G	ô
 "¤#™ðG	ô ”#”s�(‰^õG	ðV  Ø(,Ø15Ø)-ñ	Ü”sœC�x‘.ð	äð	ô !¤™ð	ô $¤D¬¡IÑ.ð		ô
 "¤#™ð	ô ”$”sœC�x‘.Ñ!÷	ðB —_‘_Ó&ˆ
Ø" ?Ñ3ˆØˆ
Ø˜{Ñ+ò 	ˆDØ×ÑÙ&ØÐ.Ñ/¸DÀÑ<NÐ^kôõð	ô ˜J°
¸1±×0BÑ0BÓ0DÔEÐEr4   rÄ   c                 ó   — || _         | S )zÿSet the name to the training Dataset.

        Parameters
        ----------
        name : str
            Name for the training Dataset.

        Returns
        -------
        self : Booster
            Booster with set training Dataset name.
        )r¼  )rk   rÄ   s     r5   Úset_train_data_namezBooster.set_train_data_name  s   € ð !%ˆÔØˆr4   r[   c                 ó2  — t        |t        «      s!t        dt        |«      j                  › �«      ‚|j
                  | j                  urt        d«      ‚t        t        j                  | j                  |j                  «       j                  «      «       | j                  j                  |«       | j                  j                  |«       | xj                   dz  c_        | j"                  j                  d«       | j$                  j                  d«       | S )a  Add validation data.

        Parameters
        ----------
        data : Dataset
            Validation data.
        name : str
            Name of validation data.

        Returns
        -------
        self : Booster
            Booster with set validation data.
        z0Validation data should be Dataset instance, met zHAdd validation data failed, you should use same predictor for these datar   NF)r¥   r"   r~   rÌ   r/   r|  rÅ  r$   rB   r   ÚLGBM_BoosterAddValidDatarÈ  rÔ  rÂ  r‡   rÃ  rÄ  rÈ  rÉ  )rk   r[   rÄ   s      r5   Ú	add_validzBooster.add_valid.  sÞ   € ô ˜$¤Ô(ÜÐNÌtÐTXËz×ObÑObÐNcÐdÓeÐeØ�?‰? $×"7Ñ"7Ñ7ÜÐ jÓkÐkÜÜ×)Ñ)Ø—‘Ø—‘Ó ×(Ñ(óô	
ð 	�‰×Ñ˜tÔ$Ø×Ñ×#Ñ# DÔ)Ø×Ò˜aÑÕØ×#Ñ#×*Ñ*¨4Ô0Ø×$Ñ$×+Ñ+¨EÔ2Øˆr4   c                 óº   — t        |«      }|r2t        t        j                  | j                  t        |«      «      «       | j                  j                  |«       | S )zëReset parameters of Booster.

        Parameters
        ----------
        params : dict
            New parameters for Booster.

        Returns
        -------
        self : Booster
            Booster with new parameters.
        )r  rB   r   ÚLGBM_BoosterResetParameterrÈ  rE   r>   r@  )rk   r>   rš  s      r5   Úreset_parameterzBooster.reset_parameterN  sO   € ô (¨Ó/ˆ
ÙÜÜ×/Ñ/Ø—L‘LÜ˜:Ó&óôð 	�‰×Ñ˜6Ô"Øˆr4   Úfobjc                 ój  — |€2| j                   | j                  j                  k7  r| j                  }d}n)|| j                  u xr | j                   |j                  k(  }|�Ò|sÐt        |t        «      s!t        dt        |«      j                  › �«      ‚|j                  | j                  urt        d«      ‚|| _        t        t        j                  | j                  | j                  j                  «       j                  «      «       d| j                   d<   | j                  j                  | _         t#        j$                  d«      }|€Š| j&                  rt        d«      ‚t        t        j(                  | j                  t#        j*                  |«      «      «       t-        | j.                  «      D �cg c]  }d‘Œ c}| _        |j2                  dk(  S | j&                  sd| j5                  d	d
i«      _         || j7                  d¬«      | j                  «      \  }}| j9                  ||¬«      S c c}w )aæ  Update Booster for one iteration.

        Parameters
        ----------
        train_set : Dataset or None, optional (default=None)
            Training data.
            If None, last training data is used.
        fobj : callable or None, optional (default=None)
            Customized objective function.
            Should accept two parameters: preds, train_data,
            and return (grad, hess).

                preds : numpy 1-D array or numpy 2-D array (for multi-class task)
                    The predicted values.
                    Predicted values are returned before any transformation,
                    e.g. they are raw margin instead of probability of positive class for binary task.
                train_data : Dataset
                    The training dataset.
                grad : numpy 1-D array or numpy 2-D array (for multi-class task)
                    The value of the first order derivative (gradient) of the loss
                    with respect to the elements of preds for each sample point.
                hess : numpy 1-D array or numpy 2-D array (for multi-class task)
                    The value of the second order derivative (Hessian) of the loss
                    with respect to the elements of preds for each sample point.

            For multi-class task, preds are numpy 2-D array of shape = [n_samples, n_classes],
            and grad and hess should be returned in the same format.

        Returns
        -------
        produced_empty_tree : bool
            ``True`` if the tree(s) produced by this iteration did not have any splits.
            This usually means that training is "finished" (calling ``update()`` again
            will not change the model's predictions). However, that is not always the
            case. For example, if you have added any randomness (like column sampling by
            setting ``feature_fraction_bynode < 1.0``), it is possible that another call
            to ``update()`` would produce a non-empty tree.
        NFr±  zJReplace training data failed, you should use same predictor for these datar   z-Cannot update due to null objective function.r   TÚ	objectiveÚnone©Údata_idx)ÚgradÚhess)rË  r®  r~  r¥   r"   r~   rÌ   r/   r|  rÅ  r$   rB   r   ÚLGBM_BoosterResetTrainingDatarÈ  rÔ  rÈ  r@   rA   r½  ÚLGBM_BoosterUpdateOneIterrF   r�  rÄ  rÉ  rG   r-  Ú_Booster__inner_predictÚ_Booster__boost)rk   r®  r.  Úis_the_same_train_setÚproduced_empty_treer  r4  r5  s           r5   r@  zBooster.updatef  sé  € ðX Ð ×!7Ñ!7¸4¿>¹>×;QÑ;QÒ!QØŸ™ˆIØ$)Ñ!à$-°·±Ð$?Ò$oÀD×DZÑDZÐ^g×^oÑ^oÑDoÐ!ØÐ Ñ)>Ü˜i¬Ô1ÜÐ"PÔQUÐV_ÓQ`×QiÑQiÐPjÐ kÓlÐlØ×#Ñ#¨4×+@Ñ+@Ñ@Ü#Ð$pÓqÐqØ&ˆDŒNÜÜ×2Ñ2Ø—L‘LØ—N‘N×,Ñ,Ó.×6Ñ6óôð .2ˆD×'Ñ'¨Ñ*Ø%)§^¡^×%;Ñ%;ˆDÔ"Ü$Ÿl™l¨1›oÐØˆ<Ø×+Ò+Ü#Ð$SÓTÐTÜÜ×.Ñ.Ø—L‘LÜ—L‘LÐ!4Ó5óôô <AÀ×ASÑASÓ;TÖ+U°aªEÒ+UˆDÔ(Ø&×,Ñ,°Ñ1Ð1à×/Ò/ØVZ�×$Ñ$ k°6Ð%:Ó;ÔSÙ˜d×2Ñ2¸AÐ2Ó>ÀÇÁÓO‰JˆD�$Ø—<‘< T°�<Ó5Ð5ùò ,Vs   Æ3	H0r4  r5  c                ó†  — | j                   dkD  r$|j                  d¬«      }|j                  d¬«      }t        |t        j                  d¬«      }t        |t        j                  d¬«      }|j
                  j                  sJ ‚|j
                  j                  sJ ‚t        |«      t        |«      k7  r$t        dt        |«      › dt        |«      › d	�«      ‚| j                  j                  «       }t        |«      || j                   z  k7  r4t        dt        |«      › dt        |«      › d
|› d| j                   › d�	«      ‚t        j                  d«      }t        t        j                  | j                   |j                  j#                  t        j$                  t        j&                  «      «      |j                  j#                  t        j$                  t        j&                  «      «      t        j(                  |«      «      «       t+        | j,                  «      D �cg c]  }d‘Œ c}| _        |j0                  dk(  S c c}w )a´  Boost Booster for one iteration with customized gradient statistics.

        .. note::

            Score is returned before any transformation,
            e.g. it is raw margin instead of probability of positive class for binary task.
            For multi-class task, score are numpy 2-D array of shape = [n_samples, n_classes],
            and grad and hess should be returned in the same format.

        Parameters
        ----------
        grad : numpy 1-D array or numpy 2-D array (for multi-class task)
            The value of the first order derivative (gradient) of the loss
            with respect to the elements of score for each sample point.
        hess : numpy 1-D array or numpy 2-D array (for multi-class task)
            The value of the second order derivative (Hessian) of the loss
            with respect to the elements of score for each sample point.

        Returns
        -------
        produced_empty_tree : bool
            ``True`` if the tree(s) produced by this iteration did not have any splits.
            This usually means that training is "finished" (calling ``__boost()`` again
            will not change the model's predictions). However, that is not always the
            case. For example, if you have added any randomness (like column sampling by
            setting ``feature_fraction_bynode < 1.0``), it is possible that another call
            to ``__boost()`` would produce a non-empty tree.
        r   rM   rQ   ÚgradientrÛ   ÚhessianzLengths of gradient (z) and Hessian (rO  z$) don't match training data length (z() * number of models per one iteration (r_  r   F)rÇ  rY   rÍ   rR   rS   rU   r\  r§   r    r®  r¾  r@   rA   rB   r   ÚLGBM_BoosterUpdateOneIterCustomrÈ  ra  râ   rã   rF   r�  rÄ  rÉ  rG   )rk   r4  r5  Únum_train_datar;  r  s         r5   Ú__boostzBooster.__boost·  sÒ  € ðD ×Ñ˜aÒØ—:‘: C�:Ó(ˆDØ—:‘: C�:Ó(ˆDÜ  d´"·*±*À:ÔNˆÜ  d´"·*±*À9ÔMˆØ�z‰z×&Ò&Ð&Ð&Ø�z‰z×&Ò&Ð&Ð&Üˆt‹9œ˜D›	Ò!ÜÐ4´S¸³Y°K¸ÌsÐSWËyÈkÐYfÐgÓhÐhØŸ™×0Ñ0Ó2ˆÜˆt‹9˜¨×)9Ñ)9Ñ9Ò9ÜØ'¬¨D«	 {°/Ä#ÀdÃ)Àð M5Ø5CÐ4Dð E7Ø7;×7GÑ7GÐ6HÈðKóð ô
 %Ÿl™l¨1›oÐÜÜ×0Ñ0Ø—‘Ø—‘×#Ñ#¤F§N¡N´6·>±>Ó$BÓCØ—‘×#Ñ#¤F§N¡N´6·>±>Ó$BÓCÜ—‘Ð0Ó1ó	ô	
ô 8=¸T×=OÑ=OÓ7PÖ'Q°!ªÒ'QˆÔ$Ø"×(Ñ(¨AÑ-Ð-ùò (Rs   È	H>c                 ó°   — t        t        j                  | j                  «      «       t	        | j
                  «      D �cg c]  }d‘Œ c}| _        | S c c}w )zŒRollback one iteration.

        Returns
        -------
        self : Booster
            Booster with rolled back one iteration.
        F)rB   r   ÚLGBM_BoosterRollbackOneIterrÈ  r�  rÄ  rÉ  )rk   r  s     r5   Úrollback_one_iterzBooster.rollback_one_iterõ  sD   € ô 	”4×3Ñ3°D·L±LÓAÔBÜ7<¸T×=OÑ=OÓ7PÖ'Q°!ªÒ'QˆÔ$Øˆùò (Rs   Á 	Ac                 ó¼   — t        j                  d«      }t        t        j                  | j
                  t        j                  |«      «      «       |j                  S rj  rk  rl  s     r5   rm  zBooster.current_iteration  rn  r4   c                 ó¼   — t        j                  d«      }t        t        j                  | j
                  t        j                  |«      «      «       |j                  S )zšGet number of models per iteration.

        Returns
        -------
        model_per_iter : int
            The number of models per iteration.
        r   )r@   rA   rB   r   Ú LGBM_BoosterNumModelPerIterationrÈ  rF   rG   )rk   Úmodel_per_iters     r5   Únum_model_per_iterationzBooster.num_model_per_iteration  sH   € ô  Ÿ™ a›ˆÜÜ×1Ñ1Ø—‘Ü—‘˜^Ó,óô	
ð ×#Ñ#Ð#r4   c                 ó¼   — t        j                  d«      }t        t        j                  | j
                  t        j                  |«      «      «       |j                  S )z‹Get number of weak sub-models.

        Returns
        -------
        num_trees : int
            The number of weak sub-models.
        r   )r@   rA   rB   r   ÚLGBM_BoosterNumberOfTotalModelrÈ  rF   rG   )rk   r!  s     r5   r!  zBooster.num_trees#  sF   € ô —L‘L “Oˆ	ÜÜ×/Ñ/Ø—‘Ü—‘˜YÓ'óô	
ð �‰Ðr4   c                 ó¼   — t        j                  d«      }t        t        j                  | j
                  t        j                  |«      «      «       |j                  S )z“Get upper bound value of a model.

        Returns
        -------
        upper_bound : float
            Upper bound value of the model.
        r   )r@   rë   rB   r   ÚLGBM_BoosterGetUpperBoundValuerÈ  rF   rG   rt  s     r5   Úupper_boundzBooster.upper_bound4  óG   € ô �o‰o˜aÓ ˆÜÜ×/Ñ/Ø—‘Ü—‘˜SÓ!óô	
ð �y‰yÐr4   c                 ó¼   — t        j                  d«      }t        t        j                  | j
                  t        j                  |«      «      «       |j                  S )z“Get lower bound value of a model.

        Returns
        -------
        lower_bound : float
            Lower bound value of the model.
        r   )r@   rë   rB   r   ÚLGBM_BoosterGetLowerBoundValuerÈ  rF   rG   rt  s     r5   Úlower_boundzBooster.lower_boundE  rO  r4   Úfevalc                 óH  — t        |t        «      st        d«      ‚d}|| j                  u rd}n;t	        t        | j                  «      «      D ]  }|| j                  |   u sŒ|dz   } n |dk(  r!| j                  ||«       | j                  dz
  }| j                  |||¬«      S )a  Evaluate for data.

        Parameters
        ----------
        data : Dataset
            Data for the evaluating.
        name : str
            Name of the data.
        feval : callable, list of callable, or None, optional (default=None)
            Customized evaluation function.
            Each evaluation function should accept two parameters: preds, eval_data,
            and return (metric_name, metric_value, maximize) or list of such tuples.

                preds : numpy 1-D array or numpy 2-D array (for multi-class task)
                    The predicted values.
                    For multi-class task, preds are numpy 2-D array of shape = [n_samples, n_classes].
                    If custom objective function is used, predicted values are returned before any transformation,
                    e.g. they are raw margin instead of probability of positive class for binary task in this case.
                eval_data : Dataset
                    A ``Dataset`` to evaluate.
                metric_name : str
                    Unique identifier for the metric (e.g. "custom_adjusted_mse").
                metric_value : float
                    Value of the evaluation metric.
                maximize : bool
                    Are higher values better? e.g. ``True`` for AUC and ``False`` for binary error.

        Returns
        -------
        result : list[EvalResult]
            List of ``lightgbm.EvalResult`` objects, named tuples of the form
            (dataset_name, metric_name, metric_value, maximize).
        z"Can only eval for Dataset instancerŠ  r   r   ©Ú	data_namer3  rS  )
r¥   r"   r~   r®  r�  r§   rÂ  r*  rÄ  Ú_Booster__inner_eval)rk   r[   rÄ   rS  r3  rC  s         r5   ÚevalzBooster.evalV  sª   € ôN ˜$¤Ô(ÜÐ@ÓAÐAØˆØ�4—>‘>Ñ!Ø‰Häœ3˜tŸ™Ó/Ó0ò �Ø˜4Ÿ?™?¨1Ñ-Ò-Ø  1™u�HÙðð
 �rŠ>Ø�N‰N˜4 Ô&Ø×)Ñ)¨AÑ-ˆHà× Ñ ¨4¸(È%Ð ÓPÐPr4   c                 ó>   — | j                  | j                  d|¬«      S )a«  Evaluate for training data.

        Parameters
        ----------
        feval : callable, list of callable, or None, optional (default=None)
            Customized evaluation function.
            Each evaluation function should accept two parameters: preds, eval_data,
            and return (metric_name, metric_value, maximize) or list of such tuples.

                preds : numpy 1-D array or numpy 2-D array (for multi-class task)
                    The predicted values.
                    For multi-class task, preds are numpy 2-D array of shape = [n_samples, n_classes].
                    If custom objective function is used, predicted values are returned before any transformation,
                    e.g. they are raw margin instead of probability of positive class for binary task in this case.
                eval_data : Dataset
                    The training dataset.
                metric_name : str
                    Unique identifier for the metric (e.g. "custom_adjusted_mse").
                metric_value : float
                    Value of the evaluation metric.
                maximize : bool
                    Are higher values better? e.g. ``True`` for AUC and ``False`` for binary error.

        Returns
        -------
        result : list[EvalResult]
            List of ``lightgbm.EvalResult`` objects, named tuples of the form
            (dataset_name, metric_name, metric_value, maximize).
        r   rU  )rW  r¼  )rk   rS  s     r5   Ú
eval_trainzBooster.eval_trainŽ  s$   € ðB × Ñ ¨4×+@Ñ+@È1ÐTYÐ ÓZÐZr4   c           	      ó¬   — t        d| j                  «      D ��cg c]-  }| j                  | j                  |dz
     ||¬«      D ]  }|‘Œ Œ/ c}}S c c}}w )a£  Evaluate for validation data.

        Parameters
        ----------
        feval : callable, list of callable, or None, optional (default=None)
            Customized evaluation function.
            Each evaluation function should accept two parameters: preds, eval_data,
            and return (metric_name, metric_value, maximize) or list of such tuples.

                preds : numpy 1-D array or numpy 2-D array (for multi-class task)
                    The predicted values.
                    For multi-class task, preds are numpy 2-D array of shape = [n_samples, n_classes].
                    If custom objective function is used, predicted values are returned before any transformation,
                    e.g. they are raw margin instead of probability of positive class for binary task in this case.
                eval_data : Dataset
                    The validation dataset.
                metric_name : str
                    Unique identifier for the metric (e.g. "custom_adjusted_mse").
                metric_value : float
                    Value of the evaluation metric.
                maximize : bool
                    Are higher values better? e.g. ``True`` for AUC and ``False`` for binary error.

        Returns
        -------
        result : list
            List of ``lightgbm.EvalResult`` objects, named tuples of the form
            (dataset_name, metric_name, metric_value, maximize).
        r   rU  )r�  rÄ  rW  rÃ  )rk   rS  rC  rÿ   s       r5   Ú
eval_validzBooster.eval_valid±  sj   € ôF ˜1˜d×0Ñ0Ó1÷
àØ×)Ñ)°D×4HÑ4HÈÈQÉÑ4OÐZ[ÐchÐ)Óiò
ð ò ð
Øó
ð 	
ùó 
s   š2Ar-  rä  rã  Úimportance_typec                 óN  — |€| j                   }t        |   }t        t        j                  | j
                  t        j                  |«      t        j                  |«      t        j                  |«      t        t        |«      «      «      «       t        | j                  |«       | S )a…  Save Booster to file.

        Parameters
        ----------
        filename : str or pathlib.Path
            Filename to save Booster.
        num_iteration : int or None, optional (default=None)
            Index of the iteration that should be saved.
            If None, if the best iteration exists, it is saved; otherwise, all iterations are saved.
            If <= 0, all iterations are saved.
        start_iteration : int, optional (default=0)
            Start index of the iteration that should be saved.
        importance_type : str, optional (default="split")
            What type of feature importance should be saved.
            If "split", result contains numbers of times the feature is used in a model.
            If "gain", result contains total gains of splits which use the feature.

        Returns
        -------
        self : Booster
            Returns self.
        )r¾  Ú_FEATURE_IMPORTANCE_TYPE_MAPPERrB   r   ÚLGBM_BoosterSaveModelrÈ  r@   rA   rE   rs   r¤  r�  )rk   r-  rä  rã  r]  Úimportance_type_ints         r5   Ú
save_modelzBooster.save_modelØ  s…   € ð: Ð Ø ×/Ñ/ˆMÜ=¸oÑNÐÜÜ×&Ñ&Ø—‘Ü—‘˜_Ó-Ü—‘˜]Ó+Ü—‘Ð0Ó1Ü”s˜8“}Ó%óô	
ô 	! ×!8Ñ!8¸(ÔCØˆr4   Úend_iterationc           	      ó¦   — t        t        j                  | j                  t	        j
                  |«      t	        j
                  |«      «      «       | S )a®  Shuffle models.

        Parameters
        ----------
        start_iteration : int, optional (default=0)
            The first iteration that will be shuffled.
        end_iteration : int, optional (default=-1)
            The last iteration that will be shuffled.
            If <= 0, means the last available iteration.

        Returns
        -------
        self : Booster
            Booster with shuffled models.
        )rB   r   ÚLGBM_BoosterShuffleModelsrÈ  r@   rA   )rk   rã  rc  s      r5   Úshuffle_modelszBooster.shuffle_models  s@   € ô( 	Ü×*Ñ*Ø—‘Ü—‘˜_Ó-Ü—‘˜]Ó+óô	
ð ˆr4   c           	      ój  — t        t        j                  | j                  «      «       | j	                  «        t        j                  «       | _        t        j                  d«      }t        t        j                  t        |«      t        j                  |«      t        j                  | j                  «      «      «       t        j                  d«      }t        t        j                  | j                  t        j                  |«      «      «       |j                  | _        t        |¬«      | _        | S )zñLoad Booster from a string.

        Parameters
        ----------
        model_str : str
            Model will be loaded from this string.

        Returns
        -------
        self : Booster
            Loaded Booster object.
        r   r×  )rB   r   rÛ  rÈ  rã  r@   rÖ   rA   rÜ  rE   rF   rÊ  rG   rÇ  r´  r�  )rk   r¥  rØ  rÌ  s       r5   rÍ  zBooster.model_from_string!  sØ   € ô 	”4×(Ñ(¨¯©Ó6Ô7Ø×ÑÔÜ—‘Ó(ˆŒÜ#Ÿ\™\¨!›_ÐÜÜ×0Ñ0Ü�yÓ!Ü—‘Ð/Ó0Ü—‘˜TŸ\™\Ó*óô	
ô Ÿ™ Q›ˆÜÜ×*Ñ*Ø—‘Ü—‘˜]Ó+óô	
ð )×.Ñ.ˆÔÜ":ÀYÔ"OˆÔØˆr4   c                 ó  — |€| j                   }t        |   }d}t        j                  d«      }t        j                  |«      }t        j
                  t        j                  |«      «      }t        t        j                  | j                  t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      |«      «       |j                  }	|	|kD  rÊt        j                  |	«      }t        j
                  t        j                  |«      «      }t        t        j                  | j                  t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |	«      t        j                  |«      |«      «       |j                  j                  d«      }
|
t        | j                   «      z  }
|
S )aN  Save Booster to string.

        Parameters
        ----------
        num_iteration : int or None, optional (default=None)
            Index of the iteration that should be saved.
            If None, if the best iteration exists, it is saved; otherwise, all iterations are saved.
            If <= 0, all iterations are saved.
        start_iteration : int, optional (default=0)
            Start index of the iteration that should be saved.
        importance_type : str, optional (default="split")
            What type of feature importance should be saved.
            If "split", result contains numbers of times the feature is used in a model.
            If "gain", result contains total gains of splits which use the feature.

        Returns
        -------
        str_repr : str
            String representation of Booster.
        r*  r   r”   )r¾  r_  r@   rñ   r2  rõ   r3  rB   r   ÚLGBM_BoosterSaveModelToStringrÈ  rA   rF   rG   r•   r¤  r�  )rk   rä  rã  r]  ra  r7  r8  r9  r:  r;  rš   s              r5   rØ  zBooster.model_to_stringF  s‰  € ð4 Ð Ø ×/Ñ/ˆMÜ=¸oÑNÐØˆ
Ü—n‘n QÓ'ˆÜ×3Ñ3°JÓ?ˆÜ"ŸO™O¬F×,<Ñ,<¸]Ó,KÓLÐÜÜ×.Ñ.Ø—‘Ü—‘˜_Ó-Ü—‘˜]Ó+Ü—‘Ð0Ó1Ü—‘˜zÓ*Ü—‘˜[Ó)Ø!óô
	
ð !×&Ñ&ˆ
à˜
Ò"Ü"×7Ñ7¸
ÓCˆMÜ &§¡´×0@Ñ0@ÀÓ0OÓ PÐÜÜ×2Ñ2Ø—L‘LÜ—L‘L Ó1Ü—L‘L Ó/Ü—L‘LÐ!4Ó5Ü—N‘N :Ó.Ü—L‘L Ó-Ø%óô
ð ×!Ñ!×(Ñ(¨Ó1ˆØÔ'¨×(?Ñ(?Ó@Ñ@ˆØˆ
r4   r1  c                 ó‚  — |€| j                   }t        |   }d}t        j                  d«      }t        j                  |«      }t        j
                  t        j                  |«      «      }	t        t        j                  | j                  t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      |	«      «       |j                  }
|
|kD  rÊt        j                  |
«      }t        j
                  t        j                  |«      «      }	t        t        j                  | j                  t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |
«      t        j                  |«      |	«      «       t        j                  |j                  j!                  d«      |¬«      }t        j                  t        j"                  | j$                  t&        ¬«      «      |d<   |S )aÉ  Dump Booster to JSON format.

        Parameters
        ----------
        num_iteration : int or None, optional (default=None)
            Index of the iteration that should be dumped.
            If None, if the best iteration exists, it is dumped; otherwise, all iterations are dumped.
            If <= 0, all iterations are dumped.
        start_iteration : int, optional (default=0)
            Start index of the iteration that should be dumped.
        importance_type : str, optional (default="split")
            What type of feature importance should be dumped.
            If "split", result contains numbers of times the feature is used in a model.
            If "gain", result contains total gains of splits which use the feature.
        object_hook : callable or None, optional (default=None)
            If not None, ``object_hook`` is a function called while parsing the json
            string returned by the C API. It may be used to alter the json, to store
            specific values while building the json structure. It avoids
            walking through the structure again. It saves a significant amount
            of time if the number of trees is huge.
            Signature is ``def object_hook(node: dict) -> dict``.
            None is equivalent to ``lambda node: node``.
            See documentation of ``json.loads()`` for further details.

        Returns
        -------
        json_repr : dict
            JSON format of Booster.
        r*  r   r”   r0  rœ  r�  )r¾  r_  r@   rñ   r2  rõ   r3  rB   r   ÚLGBM_BoosterDumpModelrÈ  rA   rF   rG   r5  r6  r•   rŸ  r�  r  )rk   rä  rã  r]  r1  ra  r7  r8  r9  r:  r;  rš   s               r5   r"  zBooster.dump_model†  s­  € ðH Ð Ø ×/Ñ/ˆMÜ=¸oÑNÐØˆ
Ü—n‘n QÓ'ˆÜ×3Ñ3°JÓ?ˆÜ"ŸO™O¬F×,<Ñ,<¸]Ó,KÓLÐÜÜ×&Ñ&Ø—‘Ü—‘˜_Ó-Ü—‘˜]Ó+Ü—‘Ð0Ó1Ü—‘˜zÓ*Ü—‘˜[Ó)Ø!óô
	
ð !×&Ñ&ˆ
à˜
Ò"Ü"×7Ñ7¸
ÓCˆMÜ &§¡´×0@Ñ0@ÀÓ0OÓ PÐÜÜ×*Ñ*Ø—L‘LÜ—L‘L Ó1Ü—L‘L Ó/Ü—L‘LÐ!4Ó5Ü—N‘N :Ó.Ü—L‘L Ó-Ø%óô
ô �j‰j˜×,Ñ,×3Ñ3°GÓ<È+ÔVˆÜ$(§J¡JÜ�J‰JØ×'Ñ'Ü0ôó%
ˆÐ Ñ!ð ˆ
r4   rå  ræ  rç  rè  ré  c	           
      ó    — t         j                  | t        |	«      ¬«      }
|€|dk  r| j                  }nd}|
j	                  ||||||||¬«      S )a¡	  Make a prediction.

        Parameters
        ----------
        data : str, pathlib.Path, numpy array, pandas DataFrame, scipy.sparse, pyarrow Table or polars DataFrame
            Data source for prediction.
            If str or pathlib.Path, it represents the path to a text file (CSV, TSV, or LibSVM).

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        start_iteration : int, optional (default=0)
            Start index of the iteration to predict.
            If <= 0, starts from the first iteration.
        num_iteration : int or None, optional (default=None)
            Total number of iterations used in the prediction.
            If None, if the best iteration exists and start_iteration <= 0, the best iteration is used;
            otherwise, all iterations from ``start_iteration`` are used (no limits).
            If <= 0, all iterations from ``start_iteration`` are used (no limits).
        raw_score : bool, optional (default=False)
            Whether to predict raw scores.
        pred_leaf : bool, optional (default=False)
            Whether to predict leaf index.
        pred_contrib : bool, optional (default=False)
            Whether to predict feature contributions.

            .. note::

                If you want to get more explanations for your model's predictions using SHAP values,
                like SHAP interaction values,
                you can install the shap package (https://github.com/slundberg/shap).
                Note that unlike the shap package, with ``pred_contrib`` we return a matrix with an extra
                column, where the last column is the expected value.

        data_has_header : bool, optional (default=False)
            Whether the data has header.
            Used only if data is str.
        validate_features : bool, optional (default=False)
            If True, ensure that the features used to predict match the ones used to train.
            Used only if data is pandas DataFrame.
        **kwargs
            Other parameters for the prediction.

        Returns
        -------
        result : numpy array, scipy.sparse or list of scipy.sparse
            Prediction result.
            Can be sparse or a list of sparse objects (each element represents predictions for one class) for feature contributions (when ``pred_contrib=True``).
        ©rÎ  rÅ  r   rŠ  )r[   rã  rä  rå  ræ  rç  rè  ré  )rÃ  rÓ  r   r¾  r  )rk   r[   rã  rä  rå  ræ  rç  rè  ré  rÔ  r¸  s              r5   r  zBooster.predictÕ  su   € ô@ $×0Ñ0ØÜ# FÓ+ð 1ó 
ˆ	ð Ð Ø !Ò#Ø $× 3Ñ 3‘à "�Ø× Ñ ØØ+Ø'ØØØ%Ø+Ø/ð !ó 	
ð 		
r4   rS  Ú
decay_raterw  rT  rV  rU  r  r€  rµ  rx  c                 ó  — | j                   rt        d«      ‚|
€i }
t        j                  | t	        |«      ¬«      }|j                  |dd|¬«      }|j                  \  }}t        j                  d«      }t        t        j                  | j                  t        j                  |«      «      «       t        d| j                  d¬	«      }t!        |j"                  «      |d<   |j%                  |
«       t        d
|d¬	«      }|j'                  d
«      }|r|	dk(  r|}	n||	k7  rd}t        |«      ‚t)        ||||||||	||¬«
      }||d<   t+        ||«      }t        t        j,                  |j                  |j                  «      «       |j/                  d«      }t1        |«      \  }}}t        t        j2                  |j                  |t        j4                  |«      t        j4                  |«      «      «       | j6                  |_        |S )a�  Refit the existing Booster by new data.

        Parameters
        ----------
        data : str, pathlib.Path, numpy array, pandas DataFrame, scipy.sparse, Sequence, list of Sequence, list of numpy array, pyarrow Table or polars DataFrame
            Data source for refit.
            If str or pathlib.Path, it represents the path to a text file (CSV, TSV, or LibSVM).

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        label : list, numpy 1-D array, pandas Series / one-column DataFrame, pyarrow ChunkedArray, polars Series or None
            Label for refit.

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        decay_rate : float, optional (default=0.9)
            Decay rate of refit,
            will use ``leaf_output = decay_rate * old_leaf_output + (1.0 - decay_rate) * new_leaf_output`` to refit trees.
        reference : Dataset or None, optional (default=None)
            Reference for ``data``.

            .. versionadded:: 4.0.0

        weight : list, numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None, optional (default=None)
            Weight for each ``data`` instance. Weights should be non-negative.

            .. versionadded:: 4.0.0

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        group : list, numpy 1-D array, pandas Series, pyarrow ChunkedArray, polars Series or None, optional (default=None)
            Group/query size for ``data``.
            Only used in the learning-to-rank task.
            sum(group) = n_samples.
            For example, if you have a 100-document dataset with ``group = [10, 20, 40, 10, 10, 10]``, that means that you have 6 groups,
            where the first 10 records are in the first group, records 11-30 are in the second group, records 31-70 are in the third group, etc.

            .. versionadded:: 4.0.0

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        init_score : list, list of lists (for multi-class task), numpy array, pandas Series, pandas DataFrame (for multi-class task), pyarrow ChunkedArray, pyarrow Table (for multi-class task), polars Series, polars DataFrame (for multi-class task) or None, optional (default=None)
            Init score for ``data``.

            .. versionadded:: 4.0.0

            .. versionadded:: 4.2.0
                Support for ``pyarrow`` inputs

            .. versionadded:: 4.7.0
                Support for ``polars`` inputs

        feature_name : list of str, or 'auto', optional (default="auto")
            Feature names for ``data``.
            If 'auto' and data is pandas DataFrame, data columns names are used.

            .. versionadded:: 4.0.0

        categorical_feature : list of str or int, or 'auto', optional (default="auto")
            Categorical features for ``data``.
            If list of int, interpreted as indices.
            If list of str, interpreted as feature names (need to specify ``feature_name`` as well).
            If 'auto' and data is pandas DataFrame, pandas unordered categorical columns are used.
            All values in categorical features will be cast to int32 and thus should be less than int32 max value (2147483647).
            Large values could be memory consuming. Consider using consecutive integers starting from zero.
            All negative values in categorical features will be treated as missing values.
            The output cannot be monotonically constrained with respect to a categorical feature.
            Floating point numbers in categorical features will be rounded towards 0.

            .. versionadded:: 4.0.0

        dataset_params : dict or None, optional (default=None)
            Other parameters for Dataset ``data``.

            .. versionadded:: 4.0.0

        free_raw_data : bool, optional (default=True)
            If True, raw data is freed after constructing inner Dataset for ``data``.

            .. versionadded:: 4.0.0

        validate_features : bool, optional (default=False)
            If True, ensure that the features used to refit the model match the original ones.
            Used only if data is pandas DataFrame.

            .. versionadded:: 4.0.0

        **kwargs
            Other parameters for refit.
            These parameters will be passed to ``predict`` method.

        Returns
        -------
        result : Booster
            Refitted Booster.
        z,Cannot refit due to null objective function.Nrm  rŠ  T)r[   rã  ræ  ré  r   r«  r³  r€  r„  ar  'categorical_feature' value passed to Booster.refit() is different from  'categorical_feature' value found in Booster.params. Preferring the value passed via keyword argument. Using refit() to change which columns are treated as categorical is not supported. If you have a valid use case for this, please open an issue at https://github.com/lightgbm-org/LightGBM/issues.)
r[   rS  rw  rT  rV  rU  r  r€  r>   rx  Úrefit_decay_rate)r½  r$   rÃ  rÓ  r   r  r¨   r@   rA   rB   r   ÚLGBM_BoosterGetLinearrÈ  rF   rR  r>   rq  rG   r@  rO  r"   r!   rÆ  r  rm  ÚLGBM_BoosterRefitrD   rº  )rk   r[   rS  rn  rw  rT  rV  rU  r  r€  rµ  rx  ré  rÔ  r¸  Ú
leaf_predsr  r”  Úout_is_linearÚ
new_paramsÚcat_features_from_paramsÚ	error_msgr®  Únew_boosterre  r  s                             r5   ÚrefitzBooster.refit)  s  € ðz ×'Ò'ÜÐ NÓOÐOØÐ!ØˆNÜ#×0Ñ0¸ÌhÐW]ÓN^Ð0Ó_ˆ	Ø!*×!2Ñ!2ØØØØ/ð	 "3ó "
ˆ
ð  ×%Ñ%‰
ˆˆdÜŸ™ Q›ˆÜÜ×&Ñ&Ø—‘Ü—‘˜]Ó+óô	
ô )Ø)Ø—;‘;Øô
ˆ
ô
 %)¨×)<Ñ)<Ó$=ˆ
�=Ñ!Ø×Ñ˜.Ô)ô
 )Ø1ØØô
ˆ
ð
 $.§>¡>Ð2GÓ#HÐ ñ $Ø" fÒ,Ø&>Ñ#Ø)Ð-@Ò@ðFð ô $ IÓ.Ð.äØØØØØØ!Ø%Ø 3ØØ'ô
ˆ	ð *4ˆ
Ð%Ñ&Ü˜j¨)Ó4ˆäÜ×"Ñ"Ø×#Ñ#Ø×!Ñ!óô	
ð  ×'Ñ'¨Ó+ˆ
Ü% jÓ1‰ˆ�!�QÜÜ×"Ñ"Ø×#Ñ#ØÜ—‘˜tÓ$Ü—‘˜tÓ$ó	ô	
ð  $Ÿ}™}ˆÔØÐr4   Útree_idÚleaf_idc           
      ó  — t        j                  d«      }t        t        j                  | j
                  t        j                  |«      t        j                  |«      t        j                  |«      «      «       |j                  S )a#  Get the output of a leaf.

        Parameters
        ----------
        tree_id : int
            The index of the tree.
        leaf_id : int
            The index of the leaf in the tree.

        Returns
        -------
        result : float
            The output of the leaf.
        r   )	r@   rë   rB   r   ÚLGBM_BoosterGetLeafValuerÈ  rA   rF   rG   )rk   rz  r{  rš   s       r5   Úget_leaf_outputzBooster.get_leaf_outputû  s_   € ô �o‰o˜aÓ ˆÜÜ×)Ñ)Ø—‘Ü—‘˜WÓ%Ü—‘˜WÓ%Ü—‘˜SÓ!ó	ô	
ð �y‰yÐr4   rG   c           
      óÎ   — t        t        j                  | j                  t	        j
                  |«      t	        j
                  |«      t	        j                  |«      «      «       | S )a˜  Set the output of a leaf.

        .. versionadded:: 4.0.0

        Parameters
        ----------
        tree_id : int
            The index of the tree.
        leaf_id : int
            The index of the leaf in the tree.
        value : float
            Value to set as the output of the leaf.

        Returns
        -------
        self : Booster
            Booster with the leaf output set.
        )rB   r   ÚLGBM_BoosterSetLeafValuerÈ  r@   rA   rë   )rk   rz  r{  rG   s       r5   Úset_leaf_outputzBooster.set_leaf_output  sL   € ô0 	Ü×)Ñ)Ø—‘Ü—‘˜WÓ%Ü—‘˜WÓ%Ü—‘ Ó&ó	ô	
ð ˆr4   c                 ó¼   — t        j                  d«      }t        t        j                  | j
                  t        j                  |«      «      «       |j                  S )zGet number of features.

        Returns
        -------
        num_feature : int
            The number of features.
        r   )r@   rA   rB   r   ÚLGBM_BoosterGetNumFeaturerÈ  rF   rG   )rk   Úout_num_features     r5   rP  zBooster.num_feature7  sH   € ô !Ÿ,™, q›/ˆÜÜ×*Ñ*Ø—‘Ü—‘˜_Ó-óô	
ð ×$Ñ$Ð$r4   c                 óœ  — | j                  «       }t        j                  d«      }d}t        j                  d«      }t	        |«      D �cg c]  }t        j
                  |«      ‘Œ }}t        j                  |z  t        t        j                  |«      Ž }t        t        j                  | j                  t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      |«      «       ||j                  k7  rt        d«      ‚|j                  }||k  rÑt	        |«      D �cg c]  }t        j
                  |«      ‘Œ }}t        j                  |z  t        t        j                  |«      Ž }t        t        j                  | j                  t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      |«      «       t	        |«      D �	cg c]   }	||	   j                  j!                  d«      ‘Œ" c}	S c c}w c c}w c c}	w )z†Get names of features.

        Returns
        -------
        result : list of str
            List with names of features.
        r   r\  r]  r”   )rP  r@   rA   r^  r�  r2  rõ   r  r3  rB   r   ÚLGBM_BoosterGetFeatureNamesrÈ  rF   rG   r    r•   r`  s
             r5   r  zBooster.feature_nameH  sÛ  € ð ×&Ñ&Ó(ˆä—l‘l 1“oˆØ&)Ð#Ü&,§o¡o°aÓ&8Ð#Ü\aÐbmÓ\nÖoÐWXœ&×5Ñ5Ð6QÕRÐoˆÐoÜ$Ÿo™o°Ñ;¼cÄ&×BRÑBRÐTbÓ>cÐdÐÜÜ×,Ñ,Ø—‘Ü—‘˜[Ó)Ü—‘˜[Ó)Ü—‘Ð ;Ó<Ü—‘Ð8Ó9Ø"óô		
ð ˜+×+Ñ+Ò+ÜÐUÓVÐVØ$?×$EÑ$EÐ!à&Ð)BÒBÜ^cÐdoÓ^pÖqÐYZœf×9Ñ9Ð:SÕTÐqˆNÐqÜ"(§/¡/°KÑ"?Ä#Äf×FVÑFVÐXfÓBgÐ!hÐÜÜ×0Ñ0Ø—L‘LÜ—L‘L Ó-Ü—L‘L Ó-Ü—O‘OÐ$=Ó>Ü—L‘LÐ!<Ó=Ø&óô	ô BGÀ{ÓASÖT¸A�˜qÑ!×'Ñ'×.Ñ.¨wÕ7ÒTÐTùò; pùò" rùò Us   Á
H?ÅIÈ%I	Ú	iterationc                 ó   — |€| j                   }t        |   }t        j                  | j	                  «       t        j
                  ¬«      }t        t        j                  | j                  t        j                  |«      t        j                  |«      |j                  j                  t        j                  t        j                  «      «      «      «       |t        k(  r|j!                  t        j"                  «      S |S )aá  Get feature importances.

        Parameters
        ----------
        importance_type : str, optional (default="split")
            How the importance is calculated.
            If "split", result contains numbers of times the feature is used in a model.
            If "gain", result contains total gains of splits which use the feature.
        iteration : int or None, optional (default=None)
            Limit number of iterations in the feature importance calculation.
            If None, if the best iteration exists, it is used; otherwise, all trees are used.
            If <= 0, all trees are used (no limits).

        Returns
        -------
        result : numpy array
            Array with feature importances.
        rÆ   )r¾  r_  rR   r  rP  rT   rB   r   ÚLGBM_BoosterFeatureImportancerÈ  r@   rA   ra  râ   rë   Ú_C_API_FEATURE_IMPORTANCE_SPLITr²   ri  )rk   r]  r‡  ra  Úresults        r5   Úfeature_importancezBooster.feature_importancet  sµ   € ð. ÐØ×+Ñ+ˆIÜ=¸oÑNÐÜ—‘˜$×*Ñ*Ó,´B·J±JÔ?ˆÜÜ×.Ñ.Ø—‘Ü—‘˜YÓ'Ü—‘Ð0Ó1Ø—‘×%Ñ%¤f§n¡n´V·_±_Ó&EÓFó	ô	
ð Ô"AÒAØ—=‘=¤§¡Ó*Ð*àˆMr4   rw  ÚbinsÚxgboost_stylec                 ó  ‡‡‡‡— dt         t        t        f   ddfˆˆˆˆfd„Š| j                  «       }|j	                  d«      Š|d   }g Š|D ]  } ‰|d   «       Œ |�t        |t        «      r:|r8t        t        j                  ‰«      «      }t        |�t        ||«      n|d«      }t        j                  ‰|¬	«      \  }}	|r@t        j                  |	dd |f«      }
|
|
dd…df   d
kD     }
t        rt        |
ddg¬«      S |
S ||	fS )a,  Get split value histogram for the specified feature.

        Parameters
        ----------
        feature : int or str
            The feature name or index the histogram is calculated for.
            If int, interpreted as index.
            If str, interpreted as name.

            .. warning::

                Categorical features are not supported.

        bins : int, str or None, optional (default=None)
            The maximum number of bins.
            If None, or int and > number of unique split values and ``xgboost_style=True``,
            the number of bins equals number of unique split values.
            If str, it should be one from the list of the supported values by ``numpy.histogram()`` function.
        xgboost_style : bool, optional (default=False)
            Whether the returned result should be in the same form as it is in XGBoost.
            If False, the returned value is tuple of 2 numpy arrays as it is in ``numpy.histogram()`` function.
            If True, the returned value is matrix, in which the first column is the right edges of non-empty bins
            and the second one is the histogram values.

        Returns
        -------
        result_tuple : tuple of 2 numpy arrays
            If ``xgboost_style=False``, the values of the histogram of used splitting values for the specified feature
            and the bin edges.
        result_array_like : numpy array or pandas DataFrame (if pandas is installed)
            If ``xgboost_style=True``, the histogram of used splitting values for the specified feature.
        Úrootr7   Nc                 óê   •— d| v rn‰�t        ‰t        «      r	‰| d      }n| d   }|‰k(  r2t        | d   t        «      rt        d«      ‚‰j                  | d   «        ‰| d   «        ‰| d   «       yy)zRecursively add thresholds.rë  Nrþ  r	  z@Cannot compute split value histogram for the categorical featurer  r  )r¥   rs   r$   r‡   )r�  rþ  rÒ  rw  rð  rÚ   s     €€€€r5   rÒ  z.Booster.get_split_value_histogram.<locals>.addÃ  s†   ø€ à Ñ$Ø Ð,´¸GÄSÔ1IØ$1°$°Ñ2GÑ$H‘Mà$(¨Ñ$9�MØ  GÒ+Ü! $ {Ñ"3´SÔ9Ü+Ð,nÓoÐoØ—M‘M $ {Ñ"3Ô4Ù�D˜Ñ&Ô'Ù�D˜Ñ'Õ(ð %r4   rð  r  r  r   )r�  r   Ú
SplitValueÚCountr   )r   rs   r   r"  rD  r¥   rÀ  r§   rR   r"  r©  rý  Ú	histogramÚcolumn_stackr   r   )rk   rw  r�  rŽ  ÚmodelÚ
tree_infosr  Ún_uniqueÚhistÚ	bin_edgesrš   rÒ  rð  rÚ   s    `         @@@r5   Úget_split_value_histogramz!Booster.get_split_value_histogramœ  s  û€ ðN	)”dœ3¤˜8‘nð 	)¨÷ 	)ð 	)ð —‘Ó!ˆØŸ	™	 /Ó2ˆØ˜;Ñ'ˆ
Ø ˆØ#ò 	-ˆIÙ�	Ð*Ñ+Õ,ð	-ð ˆ<œ: d¬CÔ0±]Üœ2Ÿ9™9 VÓ,Ó-ˆHÜ¨dÐ.>”s˜8 TÔ*ÀHÈaÓPˆDÜŸ,™, v°DÔ9‰ˆˆiÙÜ—/‘/ 9¨Q¨R =°$Ð"7Ó8ˆCØ�cš!˜Q˜$‘i !‘mÑ$ˆCÝÜ# C°,ÀÐ1HÔIÐIà�
à˜�?Ð"r4   rV  r3  c                óˆ  — || j                   k\  rt        d«      ‚| j                  «        g }| j                  dkD  �rHt	        j
                  | j                  t        j                  ¬«      }t        j                  d«      }t        t        j                  | j                  t        j                  |«      t        j                  |«      |j                  j                  t        j                  t        j                   «      «      «      «       |j"                  | j                  k7  rt        d«      ‚t%        | j                  «      D ]=  }|j'                  t)        || j*                  |   ||   | j,                  |   ¬«      «       Œ? t/        |«      r|g}|�­|dk(  r| j0                  }n| j2                  |dz
     }|D ]„  }	|	€Œ |	| j5                  |¬«      |«      }
t7        |
t8        «      r/|
D ])  }|j'                  t)        ||d   |d   |d   ¬«      «       Œ+ Œ^|j'                  t)        ||
d   |
d   |
d   ¬«      «       Œ† |S )	z%Evaluate training or validation data.ú1Data_idx should be smaller than number of datasetr   rÆ   zWrong length of eval results)rŸ  r   r¡  r¢  r   r2  r¬   )rÄ  r    rÊ  Ú_Booster__num_inner_evalrR   r  rT   r@   rA   rB   r   ÚLGBM_BoosterGetEvalrÈ  rF   ra  râ   rë   rG   r�  r‡   rž  Ú_Booster__name_inner_evalÚ"_Booster__higher_better_inner_evalrx   r®  rÂ  r8  r¥   rµ   )rk   rV  r3  rS  rš   r‹  r8  rC  Úcur_dataÚeval_functionÚ	feval_retÚ
eval_tuples               r5   Ú__inner_evalzBooster.__inner_evalæ  s  € ð �t×)Ñ)Ò)ÜÐPÓQÐQØ×ÑÔØˆØ× Ñ  1Ó$Ü—X‘X˜d×3Ñ3¼2¿:¹:ÔFˆFÜ Ÿ,™, q›/ˆKÜÜ×(Ñ(Ø—L‘LÜ—L‘L Ó*Ü—L‘L Ó-Ø—M‘M×)Ñ)¬&¯.©.¼¿¹Ó*IÓJó	ôð × Ñ  D×$9Ñ$9Ò9Ü Ð!?Ó@Ð@Ü˜4×0Ñ0Ó1ò �Ø—
‘
ÜØ%.Ø$(×$:Ñ$:¸1Ñ$=Ø%+¨A¡YØ!%×!@Ñ!@ÀÑ!Cô	õðô �EŒ?Ø�GˆEØÐØ˜1Š}ØŸ>™>‘àŸ?™?¨8°a©<Ñ8�Ø!&ò �Ø Ð(ØÙ)¨$×*>Ñ*>ÈÐ*>Ó*QÐS[Ó\�	Ü˜i¬Ô.Ø&/ò ˜
ØŸ
™
Ü&Ø-6Ø,6°q©MØ-7¸©]Ø)3°A©ô	õñð —J‘JÜ"Ø)2Ø(1°!©Ø)2°1©Ø%.¨q¡\ô	õðð. ˆ
r4   c          	      ó  — || j                   k\  rt        d«      ‚| j                  |   €Œ|dk(  r(| j                  j	                  «       | j
                  z  }n-| j                  |dz
     j	                  «       | j
                  z  }t        j                  |t        j                  ¬«      | j                  |<   | j                  |   sñt        j                  d«      }| j                  |   j                  j                  t        j                  t        j                  «      «      }t!        t#        j$                  | j&                  t        j(                  |«      t        j*                  |«      |«      «       |j,                  t/        | j                  |   «      k7  rt        d|› �«      ‚d| j                  |<   | j                  |   }| j
                  dkD  r7|j0                  | j
                  z  }|j3                  || j
                  d¬«      }|S )	z,Predict for training and validation dataset.r�  r   r   rÆ   z)Wrong length of predict results for data TrM   rQ   )rÄ  r    rÈ  r®  r¾  rÇ  rÂ  rR   r  rT   rÉ  r@   rñ   ra  râ   rë   rB   r   ÚLGBM_BoosterGetPredictrÈ  rA   rF   rG   r§   r  r  )rk   r3  r  r8  rž  r‹  r¾  s          r5   Ú__inner_predictzBooster.__inner_predict(  s¯  € à�t×)Ñ)Ò)ÜÐPÓQÐQØ×&Ñ& xÑ0Ð8Ø˜1Š}ØŸ.™.×1Ñ1Ó3°d×6FÑ6FÑF‘àŸ/™/¨(°Q©,Ñ7×@Ñ@ÓBÀT×EUÑEUÑU�Ü46·H±H¸WÌBÏJÉJÔ4WˆD×'Ñ'¨Ñ1à×+Ñ+¨HÒ5Ü Ÿ.™.¨Ó+ˆKØ×2Ñ2°8Ñ<×CÑC×KÑKÌFÏNÉNÔ[a×[jÑ[jÓLkÓlˆHÜÜ×+Ñ+Ø—L‘LÜ—L‘L Ó*Ü—L‘L Ó-Øó	ôð × Ñ ¤C¨×(CÑ(CÀHÑ(MÓ$NÒNÜ Ð#LÈXÈJÐ!WÓXÐXØ59ˆD×(Ñ(¨Ñ2Ø!×8Ñ8¸ÑBˆØ×Ñ˜aÒØ—{‘{ d×&6Ñ&6Ñ6ˆHØ—^‘^ H¨d×.>Ñ.>Àc�^ÓJˆFØˆr4   c                 óž  — | j                   �r,d| _         t        j                  d«      }t        t	        j
                  | j                  t        j                  |«      «      «       |j                  | _	        | j                  dkD  �r²t        j                  d«      }d}t        j                  d«      }t        | j                  «      D �cg c]  }t        j                  |«      ‘Œ }}t        j                  | j                  z  t        t        j                  |«      Ž }t        t	        j                   | j                  t        j                  | j                  «      t        j                  |«      t        j                  |«      t        j                  |«      |«      «       | j                  |j                  k7  rt#        d«      ‚|j                  }||k  rït        | j                  «      D �cg c]  }t        j                  |«      ‘Œ }}t        j                  | j                  z  t        t        j                  |«      Ž }t        t	        j                   | j                  t        j                  | j                  «      t        j                  |«      t        j                  |«      t        j                  |«      |«      «       t        | j                  «      D �	cg c]   }	||	   j                  j%                  d«      ‘Œ" c}	| _        | j&                  D �
cg c]  }
|
j)                  d«      ‘Œ c}
| _        yyyc c}w c c}w c c}	w c c}
w )z%Get inner evaluation count and names.Fr   r\  z1Length of eval names doesn't equal with num_evalsr”   )Úauczndcg@zmap@Úaverage_precisionN)r»  r@   rA   rB   r   ÚLGBM_BoosterGetEvalCountsrÈ  rF   rG   rž  r^  r�  r2  rõ   r  r3  ÚLGBM_BoosterGetEvalNamesr    r•   r   r¬  r¡  )rk   Úout_num_evalr8  ra  rb  r  rc  rd  re  rC  rÄ   s              r5   Ú__get_eval_infozBooster.__get_eval_infoG  s°  € à×'Ó'Ø+0ˆDÔ(Ü!Ÿ<™<¨›?ˆLäÜ×.Ñ.Ø—L‘LÜ—L‘L Ó.óôð %1×$6Ñ$6ˆDÔ!Ø×$Ñ$ qÓ(ä$Ÿl™l¨1›o�Ø.1Ð+Ü.4¯o©o¸aÓ.@Ð+äV[Ð\`×\qÑ\qÓVrö"ØQR”F×/Ñ/Ð0KÕLð"�ð "ô '-§o¡o¸×8MÑ8MÑ&MÔPSÔTZ×TdÑTdÐftÓPuÐ%vÐ"ÜÜ×1Ñ1ØŸ™ÜŸ™ T×%:Ñ%:Ó;ÜŸ™ [Ó1ÜŸ™Ð(CÓDÜŸ™Ð%@ÓAØ*óô	ð ×(Ñ(¨K×,=Ñ,=Ò=Ü$Ð%XÓYÐYØ,G×,MÑ,MÐ)à.Ð1JÒJäX]Ð^b×^sÑ^sÓXtö&ØSTœ×3Ñ3Ð4MÕNð&�Nð &ô +1¯/©/¸D×<QÑ<QÑ*QÜœV×-Ñ-¨~Ó>ð*Ð&ô Ü×5Ñ5Ø ŸL™LÜ"ŸL™L¨×)>Ñ)>Ó?Ü"ŸL™L¨Ó5Ü"ŸO™OÐ,EÓFÜ"ŸL™LÐ)DÓEØ.óô	ô \aÐae×avÑavÓ[wÖ)xÐVW¨.¸Ñ*;×*AÑ*A×*HÑ*HÈÕ*QÒ)x�Ô&à_c×_uÑ_uö3ØW[�D—O‘OÐ$QÕRò3�Õ/ðS )ð (ùò "ùò&&ùò  *yùò3s   Ã
L;Ç.M Ë%MÌM
)NNNNro  )r7   r!   )r¶  r¸  r   ©NNr9   )Nr   rX  )r   rŠ  )Nr   rX  N)r   NFFFFF)
gÍÌÌÌÌÌì?NNNNr„  r„  NTF)rX  N)NF)Kr/   r0   r1   r2   r   r   rs   r   r"   r   r   rÍ  rÝ  rÓ  rÒ  râ  rÝ  rÌ  rá  rã  r   r   rÀ  rÀ  rÐ  r   r%  r'  r*  r-  Ú_LGBM_CustomObjectiveFunctionrq  r@  rR   r¦   r9  rD  rm  rI  r!  rŸ   rN  rR  Ú_LGBM_CustomEvalFunctionrž  rX  rZ  r\  rb  rf  rÍ  rØ  r   r"  rr  rs  r  r“  r”  r•  r–  r—  r˜  r™  ry  r~  r�  rP  r  rŒ  r   r›  rW  r8  rÊ  r3   r4   r5   r!   r!   h  s  „ Ùð ,0Ø'+Ø15Ø#'ñHà˜˜c 3˜h™Ñ(ðHð ˜GÑ$ðHð ˜U 3¨ 9Ñ-Ñ.ð	Hð
 ˜C‘=óHóT
ó'ð, #ð ,°ð ,¸ó ,ð˜d 3¨ 8™nó ð$ $ s¨C x¡.ð $°Tó $ð? 4¨¨S¨¡>ó ?ó8óð "'Ø"Øñ$à˜˜S™	 3 s¡8¨SÐ0Ñ1ð$ð ð$ð ð	$ð
 ð$ð 
ó$óL
ð\F Ló \Fð|¨ð °	ó ð ˜gð ¨Sð °Yó ð@ d¨3°¨8¡nð ¸ó ð4 (,Ø8<ñO6à˜GÑ$ðO6ð Ð4Ñ5ðO6ð 
ó	O6ðb<.ð �j‰jð<.ð �j‰jð	<.ð
 
ó<.ó|
ð" 3ó "ð"$¨ó $ð"˜3ó ð"˜Uó ð"˜Uó ð* \`ñ	6Qàð6Qð ð6Qð ˜Ð6¸Ð=UÑ8VÐVÑWÑXð	6Qð
 
ˆjÑ	ó6Qðt \`ñ![à˜Ð6¸Ð=UÑ8VÐVÑWÑXð![ð 
ˆjÑ	ó![ðJ \`ñ%
à˜Ð6¸Ð=UÑ8VÐVÑWÑXð%
ð 
ˆjÑ	ó%
ðT (,Ø Ø&ñ*à˜˜T˜	Ñ"ð*ð   ‘}ð*ð ð	*ð
 ð*ð 
ó*ð\  !Øñàðð ðð 
ó	ð:#¨3ð #°9ó #ðN (,Ø Ø&ñ	>à ‘}ð>ð ð>ð ð	>ð
 
ó>ðD (,Ø Ø&ØLPñMà ‘}ðMð ðMð ð	Mð
 ˜h¨¨S°#¨X©Ð'7¸¸cÀ3¸h¹Ð'GÑHÑIðMð 
ˆc�3ˆh‰óMðd  !Ø'+ØØØ"Ø %Ø"'ñR
à#ðR
ð ðR
ð   ‘}ð	R
ð
 ðR
ð ðR
ð ðR
ð ðR
ð  ðR
ð ðR
ð 
!óR
ðp  Ø'+Ø-1Ø+/Ø48Ø7=ØEKØ37Ø"Ø"'ñPà!ðPð ðPð ð	Pð
 ˜GÑ$ðPð Ð)Ñ*ðPð ˜Ñ(ðPð Ð0Ñ1ðPð 5ðPð CðPð !  c¨3 h¡Ñ0ðPð ðPð  ðPð ðPð 
óPðd sð °Sð ¸Uó ð4 àð ð ð ð ð	 ð
 
ó ðD%˜Só %ð"*U˜d 3™ió *Uð\  'Ø#'ñ&àð&ð ˜C‘=ð&ð 
�‰ó	&ðV +/Ø#ñ	H#à�s˜C�x‘ðH#ð �u˜S #˜X‘Ñ'ðH#ð ð	H#ð
 
ˆu�R—Z‘Z §¡Ð+Ñ,¨b¯j©j¸,ÐFÑ	GóH#ðT@ð ð@ð ð	@ð
 ˜Ð6¸Ð=UÑ8VÐVÑWÑXð@ð 
ˆjÑ	ó@ðD¨3ð °2·:±:ó ô>8r4   r!   )rl   rr   r9   r±  )½r2   Úlibpathr   r¾  r@   rÌ  r5  rp   Úcollectionsr   r±   r   Úenumr   Ú	functoolsr   Úosr	   r
   Úos.pathr   Úpathlibr   Útempfiler   Útypingr   r   r   r   r   r   r   r   r   r   r   r   Únarwhalsr  Únarwhals.dependenciesÚdependenciesrÿ  Únarwhals.typingÚnwtÚnumpyrR   Úscipy.sparserø  Úcompatr   r   r   r   r   r   r    Ú__all__rÖ   rp  r›  Ú_ctypes_int_ptrÚ_ctypes_int_arrayÚ_ctypes_float_ptrÚ_ctypes_float_arrayrs   rŸ   rq  Ú_LGBM_EvalFunctionResultTypeÚ_LGBM_BoosterBestScoreTyperÀ  r™  r˜  r¦   Ú
IntoSeriesr–  rš  ÚIntoDataFramer—  rù  r  r“  r”  rr  rs  rt  r•  rœ  r:   Ú_MULTICLASS_OBJECTIVESr:  r$   r<   rI   r\   r^   rf   rt   r¬  r   r€   rz   r%   rŠ   rŽ   r�   r’   Úbytesr–   rD  rõ   rœ   ÚrestypeÚ	CFUNCTYPEÚcallbackÚLGBM_RegisterLogCallbackr•   r  rB   r¢   rª   r­   r³   r¶   r¾   rÁ   rÃ   rÍ   rÏ   rÑ   rÓ   Ú	pythonapiÚPyCapsule_GetPointerr×   Ú	py_objectÚargtypesÚobjectrØ   rÜ   rè   rì   rï   rò   rE   rÌ   ÚArrayrú   r  r
  r  r  ÚFutureWarningr#   r(  rR  r  rb  rc  rj  rl  rV   rW   rò  ró  rô  rõ  rO  r]  rŠ  Ú_C_API_FEATURE_IMPORTANCE_GAINr<  r_  r]  rg  rm  rr  rÉ   r~  r™  r¤  r´  ÚABCr&   rÃ  r"   r²  r³  rž  r!   r3   r4   r5   ú<module>rÝ     s|  ðâ $õ ã 
Û Û Û Û Ý #Ý Ý Ý ß  Ý Ý Ý 'ß x× x× xÓ xã Ý #Ý Û Û ç ZÕ Záß)ò€ð —‘€Ø—‘€Øð'ñ€ð ð5ñÐ ð ð(ñÐ ð ð6ñÐ ð  % S¨%°Ð%5Ñ6Ð Ø! # t¨C°¨JÑ'7Ð"7Ñ8Ð Ø(-¨d°3©i¸¸c¹ÐDUÐ.UÑ(VÐ %Ø!& t¨C¡yÐ2CÐ'CÑ!DÐ ØØˆ�KØˆ�IØ‡J�JØØ‡N�Nð	ñ€ð Ø‡J�JØØ‡N�NðñÐ ð
 Øˆ�KØˆˆe‰ÑØ‡J�JØØØ‡N�NØ×ÑðñÐ ð ØØØ‡J�JØØ	‡L�L×ÑØØˆÑØˆ�‰ÑØ×Ñðñ
Ð ð Øˆ�KØˆ�IØ‡J�JØØØ‡N�NØ×Ñðñ€ð ØØØ‡J�JØØ	‡L�L×ÑØ×ÑðñÐ ð  Ø‡J�JØ	‡L�L×ÑØˆ�‰×	Ñ	Ñð!ñÐ ð
 !&Ø	‡L�L×ÑØˆ�‰×	Ñ	Ñð!ñ!Ð ð Øˆ�KØˆ�IØ‡J�JØØ‡N�Nð	ñÐ ð Øˆˆe‰ÑØˆˆc‰�OØˆ�KØˆ�IØ‡J�JØØØ×Ñðñ	Ð ð €âcÐ ô	�Iô 	ð2�ð 2˜$ó 2ð	 #ð 	¨sð 	°só 	ð+�r—z‘zð + e¨B¯J©J¸¨OÑ&<ó +ô&�4ô ÷)ñ )ñ ‹~€ˆÓ ØÐ Ø Ð ð8˜ð 8¨#ð 8°$ó 8ð #Ø(ñ/Øð/àð/ð ð/ð 
ó	/ð2 8¨S¨E°4¨KÑ#8ð ¸XÀsÀeÈTÀkÑ=Ró ð"-�3ð -˜4ó -ð0�cð 0˜dó 0ð ð-�Sð -˜Tò -ó ð-ð*�uð * ó *ð €7‡;�;Ð# WÓ-°Ò7Ø%+§_¡_€D×ÑÔ"Øˆv×Ñ  f§o¡oÓ6€HÙ˜]Ó+€D„MØ$€t×$Ñ$ T§]¡]Ó3°qÒ8ÙÐ2˜D×2Ñ2Ó4×;Ñ;¸GÓDÓEÐEð �u˜dÐ#€ð	F�Cð 	F˜Dó 	Fð�Sð ˜Tó ðA˜Sð A Tó Að
- ð -¨ó -ð1 b§j¡jð 1Ð9Nð 1ÐSU×S]ÑS]ó 1ðI�cð I˜dó Ið
S 3ð SÐ+Hó SðQ ð QÐ(Có Qðx˜Cð x Dó xð

à
ð
ð !ð
ð ð	
ð
 ‡Z�Zó
ð0W˜Sð W Tó Wð
M�cð M˜dó Mð
[˜Cð [ Dó [ð
  ×)Ò)×>Ò>Ð Ø!'§¡Ð Ô Ø#)×#3Ò#3°V·_±_Ð"EÐ Ô ðU°Vð UÀÇÁó Uð
Ø
ðà ðð ðð ‡Z�Zó	ð&5Ð&7ð 5Àð 5ÈÏÉó 5ð6Ð&7ð 6Àð 6ÈÏÉó 6ð5Ð$5ð 5¸sð 5ÀrÇzÁzó 5ð5Ð$5ð 5¸sð 5ÀrÇzÁzó 5ð3�3ð 3˜6Ÿ?™?ó 3ð
*�Dð * $ s¡)ð *°·²ó *ð
 #ð ¨#ó ð�%˜˜U C¨Ð-Ñ.ð °3ó ð˜X d¨3°¨8¡nÑ5ð ¸#ó ÷ñ ô 	˜]ô 	÷:ñ :ðz,¨ð ,°d¸3À¸8±nð ,ÐUXð ,Ð]aÐbeÐgjÐbjÑ]kó ,ð^ €
à 8ØÐ ØÐ ØÐ ØÐ à .ØÐ ØÐ à >ØÐ ØÐ ØÐ ØÐ à ,ØÐ ØÐ à 1Ø"#Ð Ø!"Ð à à!Ø"Ø&ØØ"ñÐ ð 8à,Ø*ñ#Ð ð	 b§j¡jð 	°R·Z±Zó 	ð'˜Ÿ™ð '¨Ð.?ÀÀbÇjÁjÐ.PÑ(Qó 'ð*'�r—z‘zð ' e¨O¸SÀ"Ç*Á*Ð,LÑ&Mó 'ð*x 4ð x¨Dó xð
	
°yð 	
ÀTó 	
ðBØ
ðBà'ðBð ‡Z�ZóBð"/Ø
ð/à0ð/ð ?ð/ð !  d¡Ñ,ð	/ð
 ˆ2�:‰:�t˜C‘y %¨¨S©	°4¸±9Ð(<Ñ"=¸tÀD¹zÐIÑJó/ðh -1ñ	Ø   d¡Ñ,ð	à˜˜c 4˜iÑ(Ñ)ð	ð 	ó	ð -1Ø#ñØ˜˜c 4˜iÑ(Ñ)ðà˜‰}ðð ˆd�4‰jÑóô8?_ˆs�wŠwô ?_÷DU"ñ U"÷p{ñ {ð|; !)Ø‡Z�Z�ÐØ	ˆ"�*‰*�b—j‘jÐ
 Ñ!ð#ñ!Ð ð !ØØ	�‰�WÐØ$ð	&ñð Ø	�‰�WÐØÐ)Ñ*ð	,ñð	ñ	Ð ô3/�ô 3/÷lWò Wr4   