Ë
    °Ó^j‚i  ã                   óš  — d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
ZddlZddlmZmZm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mZmZ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+ ddl,m-Z-m.Z.m/Z/ de-dee0   ddfd„Z1de-dee0   ddfd„Z2de-de3ddfd„Z4de-ddfd„Z5de-ddfd„Z6de-defd„Z7 G d„ de"«      Z8 G d„ de!«      Z9 G d „ d!e8«      Z:de-ddfd"„Z;de-ddfd#„Z<de-ddfd$„Z=de-ddfd%„Z>de-ddfd&„Z?de-d'e@ddfd(„ZAde-ddfd)„ZBde-ddfd*„ZCdd+d+d+d,d-œde-d.e@d/e@d0ejˆ                  d1ejˆ                  d2eee@ef      d3e3d4e3d5e3d6e3ddfd7„ZEde-ddfd8„ZFde-ddfd9„ZGde-ddfd:„ZHde-ddfd;„ZIde-ddfd<„ZJde-ddfd=„ZKde-ddfd>„ZLde-ddfd?„ZMde-ddfd@„ZNdeee-gdf      fdA„ZOde-dBe@dePfdC„ZQde-dBe@ddfdD„ZRde-ddfdE„ZSy)Fz Tests for multi-target training.é    )Ú
ModuleType)ÚAnyÚCallableÚDictÚListÚOptionalÚTupleN)Úmake_classificationÚmake_multilabel_classificationÚmake_regression)Úcosine_similarityé   )Ú	ArrayLike)Úimport_cupy)ÚBoosterÚDMatrixÚExtMemQuantileDMatrixÚQuantileDMatrixÚ
build_info)Ú	ObjectiveÚTreeObjective)ÚXGBClassifier)Útrainé   )ÚIteratorForTest)ÚResetStrategyÚtrain_result)ÚDeviceÚassert_allcloseÚnon_increasingÚdeviceÚlearning_rateÚreturnc                 ó´  — t        ddddd¬«      \  }}t        ddt        «       gd| |¬	«      }|j                  ||||fg¬
«       |j                  dk(  sJ ‚t        |j                  «       d   d   «      sJ ‚|�/t        |dz
  «      dk  r|j                  «       d   d   d   dk  sJ ‚|j                  |«      }|j                  |j                  d   dfk(  sJ ‚y)z'Use vector leaf for multi-class models.é€   é   é
   é   éé  )Ú
n_featuresÚn_informativeÚ	n_classesÚrandom_stateTÚmulti_output_tree©Údebug_synchronizeÚmulti_strategyÚ	callbacksÚn_estimatorsr!   r"   ©Úeval_setúmulti:softprobÚvalidation_0ÚmloglossNç      ð?çñhãˆµøä>éÿÿÿÿg
×£p=
§?r   )
r
   r   r   ÚfitÚ	objectiver    Úevals_resultÚabsÚpredict_probaÚshape©r!   r"   ÚXÚyÚclfÚprobas         úg/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/xgboost/testing/multi_target.pyÚrun_multiclassrH      s÷   € äØ˜¨"¸Èô�D€A€qô ØØ*Ü “?Ð#ØØØ#ô€Cð ‡G�GˆAˆq˜Q ˜F˜8€GÔ$Ø�=‰=Ð,Ò,Ð,Ð,Ü˜#×*Ñ*Ó,¨^Ñ<¸ZÑHÔIÐIÐIØÐ ¤S¨¸Ñ)<Ó%=ÀÒ%DØ×ÑÓ! .Ñ1°*Ñ=¸bÑAÀEÒIÐIÐIà×Ñ˜aÓ €EØ�;‰;˜1Ÿ7™7 1™: q˜/Ò)Ð)Ñ)ó    c                 ó¤  — t        dd¬«      \  }}t        ddt        «       gd| |¬«      }|j                  ||||fg¬«       |j                  d	k(  sJ ‚t        |j                  «       d
   d   «      sJ ‚|�/t        |dz
  «      dk  r|j                  «       d
   d   d   dk  sJ ‚|j                  |«      }|j                  |j                  k(  sJ ‚y)z6Use vector leaf for multi-label classification models.r%   r)   ©r-   Tr.   r'   r/   r4   zbinary:logisticr7   ÚloglossNr9   r:   r;   g¤p=
×£°?)
r   r   r   r<   r=   r    r>   r?   r@   rA   rB   s         rG   Úrun_multilabelrM   4   sä   € ä)¨#¸DÔA�D€A€qÜ
ØØ*Ü “?Ð#ØØØ#ô€Cð ‡G�GˆAˆq˜Q ˜F˜8€GÔ$Ø�=‰=Ð-Ò-Ð-Ð-Ü˜#×*Ñ*Ó,¨^Ñ<¸YÑGÔHÐHÐHØÐ ¤S¨¸Ñ)<Ó%=ÀÒ%DØ×ÑÓ! .Ñ1°)Ñ<¸RÑ@À5ÒHÐHÐHà×Ñ˜aÓ €EØ�;‰;˜!Ÿ'™'Ò!Ð!Ñ!rI   Úweightedc                 óf  ‡‡‡	‡
— d| g d¢ddœŠ	dŠt        ‰dd¬«      \  ŠŠ
d	t        t        j                     d
dfˆˆˆ	ˆ
fd„}|sd}n3t        j                  j                  d«      }|j                  dd‰¬«      } ||«       t        ‰‰
|¬«      }t        ‰	|d¬«      }t        |d   d   «      sJ ‚y)z*Check quantile regression for vector leaf.úreg:quantileerror©gÍÌÌÌÌÌÜ?ç      à?gš™™™™™á?r.   )r=   r!   Úquantile_alphar1   é   é   éê  )Ú	n_samplesr*   r-   Úweightr#   Nc                 ó  •— t        ‰‰| ¬«      }t        ‰||dfgd¬«      }|j                  |«      }|j                  ‰dfk(  sJ ‚|dd…df   |dd…df   k  j	                  «       sJ ‚|dd…df   |dd…df   k  j	                  «       sJ ‚y)	z…The first tree should not generate quantile crossing given sufficient amount
        of samples for quantile interpolation.

        ©rX   ÚTrainr   )ÚevalsÚnum_boost_roundé   Nr   r   )r   r   ÚpredictrA   Úall)rX   ÚXyÚboosterÚy_predtrC   rW   ÚparamsrD   s       €€€€rG   Úno_crossing_first_treez1run_quantile_loss.<locals>.no_crossing_first_treeT   s›   ø€ ô
 ˜Q ¨&Ô1ˆÜ˜ ¨B°¨=¨/È1ÔMˆØ—/‘/ "Ó%ˆØ�}‰} ¨A Ò.Ð.Ð.Øš˜1˜‘ ª¨A¨¡Ñ.×3Ñ3Ô5Ð5Ð5Øš˜1˜‘ ª¨A¨¡Ñ.×3Ñ3Ô5Ð5Ñ5rI   ç        r9   ©ÚsizerZ   r'   ©Ú
num_roundsr   Úquantile)
r   r   ÚnpÚndarrayÚrandomÚdefault_rngÚuniformr   r   r    )r!   rN   re   rX   Úrngra   r>   rC   rW   rd   rD   s          @@@@rG   Úrun_quantile_lossrr   I   sÂ   û€ ð )ØÚ+Ø-ñ	€Fð €IÜ Y¸2ÈDÔQ�D€A€qð
6¤x´·
±
Ñ';ð 
6À÷ 
6ð 
6ñ Ø‰ô �i‰i×#Ñ# DÓ)ˆØ—‘˜S #¨I�Ó6ˆá˜6Ô"ä	˜˜A fÔ	-€BÜ ¨°rÔ:€LÜ˜, wÑ/°
Ñ;Ô<Ð<Ñ<rI   c                 ó  — d| g d¢dddœ}d}t         j                  j                  d«      }|j                  |df¬	«      }|d
d
…df   d|d
d
…df   z  z
  |j                  |¬	«      z   }t	        ||«      }i }t        |||dfg|d¬«      }|j                  |«      }	|	j                  |dfk(  sJ ‚|	d
d
…df   |	d
d
…df   k  j                  «       sJ ‚|	d
d
…df   |	d
d
…df   k  j                  «       sJ ‚t        |d   d   «      sJ ‚y
)zMCheck that reparameterized expectile regression produces non-crossing curves.zreg:expectileerrorrQ   r.   Úhist)r=   r!   Úexpectile_alphar1   Útree_methodrT   ië  rU   rg   Nr   rR   r   r[   r'   )r\   r>   r]   r^   r   Ú	expectile)
rl   rn   ro   Únormalr   r   r_   rA   r`   r    )
r!   rd   rW   rq   rC   rD   ra   r>   rb   rc   s
             rG   Úrun_expectile_lossry   n   s3  € ð *ØÚ,Ø-Øñ€Fð €IÜ
�)‰)×
Ñ
 Ó
%€CØ�
‰
˜ B˜ˆ
Ó(€AØ	Š!ˆQˆ$‰�#˜š!˜Q˜$™‘-Ñ #§*¡*°) *Ó"<Ñ<€Aä	˜˜AÓ	€BØ$&€LÜØØ
Ø�Gˆ}ˆoØ!Øô€Gð �o‰o˜bÓ!€GØ�=‰=˜Y¨˜NÒ*Ð*Ð*Ø’A�q�D‰M˜W¢Q¨ T™]Ñ*×/Ñ/Ô1Ð1Ð1Ø’A�q�D‰M˜W¢Q¨ T™]Ñ*×/Ñ/Ô1Ð1Ð1Ü˜, wÑ/°Ñ<Ô=Ð=Ñ=rI   c                 óÂ   — d| ddœ}d}t        |ddd¬«      \  }}t        ||«      }i }t        |||d	fgd
|d¬«       t        |d	   d   «      sJ ‚|d	   d   d   dk  sJ ‚y)z*Test mean absolute error with vector leaf.zreg:absoluteerrorr.   ©r=   r!   r1   é   rU   r^   rV   ©rW   r*   Ú	n_targetsr-   r[   F©r\   Úverbose_evalr>   r]   Úmaer;   g      >@N)r   r   r   r    )r!   rd   rW   rC   rD   ra   r>   s          rG   Úrun_absolute_errorr‚   �   sœ   € ð )ØØ-ñ€Fð
 €IÜØ¨°aÀdô�D€A€qô 
˜˜AÓ	€BØ$&€LÜ	ØØ
Ø�Gˆ}ˆoØØ!Øõô ˜, wÑ/°Ñ6Ô7Ð7Ð7Ø˜Ñ  Ñ'¨Ñ+¨dÒ2Ð2Ñ2rI   c                 ó4   — | dk(  rt        «       }|S t        }|S )NÚcuda)r   rl   )r!   Úndas     rG   Ú_array_implr†   ¦   s$   € Ø�ÒÜ‹mˆð €Jô ˆØ€JrI   c            
       ód   — e Zd ZdZdeddfd„Zdededede	eef   fd	„Z
ded
edede	eef   fd„Zy)ÚLsObj0z%Split grad is the same as value grad.r!   r#   Nc                 ó   — || _         y ©N©r!   ©Úselfr!   s     rG   Ú__init__zLsObj0.__init__±   ó	   € Øˆ�rI   Ú	iterationÚy_predÚdtrainc                 óÄ   — t        | j                  «      }|j                  «       }t        j                  ||d «      \  }}|j                  |«      |j                  |«      fS rŠ   ©r†   r!   Ú	get_labelÚtmÚls_objÚarray©r�   r�   r‘   r’   r…   Úy_trueÚgradÚhesss           rG   Ú__call__zLsObj0.__call__´   óQ   € ô ˜$Ÿ+™+Ó&ˆà×!Ñ!Ó#ˆÜ—Y‘Y˜v v¨tÓ4‰
ˆˆdØ�y‰y˜‹ §	¡	¨$£Ð/Ð/rI   r›   rœ   c                 óp   — t        | j                  «      }|j                  |«      |j                  |«      fS rŠ   )r†   r!   r˜   )r�   r�   r›   rœ   r…   s        rG   Ú
split_gradzLsObj0.split_grad½   s-   € ô ˜$Ÿ+™+Ó&ˆØ�y‰y˜‹ §	¡	¨$£Ð/Ð/rI   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rŽ   Úintr   r   r	   r�   r    © rI   rG   rˆ   rˆ   ®   sv   „ Ù/ð˜vð ¨$ó ð0Øð0Ø&/ð0Ø9@ð0à	ˆy˜)Ð#Ñ	$ó0ð0Øð0Ø$-ð0Ø5>ð0à	ˆy˜)Ð#Ñ	$ô0rI   rˆ   c            
       óB   — e Zd ZdZdeddfd„Zdededede	eef   fd	„Z
y)
ÚLsObj1zNo split grad.r!   r#   Nc                 ó   — || _         y rŠ   r‹   rŒ   s     rG   rŽ   zLsObj1.__init__Ç   r�   rI   r�   r‘   r’   c                 óÄ   — t        | j                  «      }|j                  «       }t        j                  ||d «      \  }}|j                  |«      |j                  |«      fS rŠ   r”   r™   s           rG   r�   zLsObj1.__call__Ê   rž   rI   )r¡   r¢   r£   r¤   r   rŽ   r¥   r   r   r	   r�   r¦   rI   rG   r¨   r¨   Ä   sG   „ Ùð˜vð ¨$ó ð0Øð0Ø&/ð0Ø9@ð0à	ˆy˜)Ð#Ñ	$ô0rI   r¨   c            
       óv   ‡ — e Zd ZdZdedefˆ fd„Zdededede	e
j                  e
j                  f   fd	„Zˆ xZS )
ÚLsObj2zUse mean as split grad.r!   Ú
check_usedc                 ó4   •— || _         t        ‰| �	  |¬«       y )Nr‹   )Ú_chkÚsuperrŽ   )r�   r!   r­   Ú	__class__s      €rG   rŽ   zLsObj2.__init__Ø   s   ø€ ØˆŒ	Ü‰Ñ ÐÕ'rI   r�   r›   rœ   r#   c                 óœ   — t        | j                  «      }| j                  rJ ‚|j                  |d¬«      }|j                  |d¬«      }||fS )Nr   )Úaxis)r†   r!   r¯   Úmean)r�   r�   r›   rœ   r…   ÚsgradÚshesss          rG   r    zLsObj2.split_gradÜ   sL   € ô ˜$Ÿ+™+Ó&ˆà�9Š9Ø�5Ø—‘˜ A�Ó&ˆØ—‘˜ A�Ó&ˆØ�eˆ|ÐrI   )r¡   r¢   r£   r¤   r   ÚboolrŽ   r¥   r   r	   rl   rm   r    Ú__classcell__)r±   s   @rG   r¬   r¬   Õ   sP   ø„ Ù!ð(˜vð (°4õ (ð	Øð	Ø$-ð	Ø5>ð	à	ˆr�z‰z˜2Ÿ:™:Ð%Ñ	&÷	rI   r¬   c                 óþ  ‡ ‡— t        dddd¬«      \  }}t        ||«      Š	 ddt        t           dt        t        t
              d	t        fˆˆ fd
„} |t        ‰ «      «      } |t        ‰ «      «      }t        j                  j                  |j                  |«      |j                  |«      «        |t        ‰ «      dg|j                  d   z  «      } |ddg|j                  d   z  «      }t        j                  j                  |j                  |«      |j                  |«      «        |t        ‰ d«      «       t        j                   t"        «      5   |t        ‰ d«      «       ddd«       y# 1 sw Y   yxY w)z6Basic test for using reduced gradient for tree splits.r|   rU   éÊ  é   ©rW   r*   r-   r~   NÚobjÚ
base_scorer#   c                 óf   •— i }t        d‰dd|dœ‰‰dfg| d|¬«      }t        |d   d   «      sJ ‚|S )	NTr.   r   )r0   r!   r1   r"   r¾   r[   é   ©r\   r½   r]   r>   Úrmse)r   r    )r½   r¾   r>   rb   ra   r!   s       €€rG   Úrun_testz"run_reduced_grad.<locals>.run_testï   s^   ø€ ð )+ˆÜà%)Ø Ø"5Ø!"Ø(ñð Ø˜�=�/ØØØ%ô
ˆô ˜l¨7Ñ3°FÑ;Ô<Ð<Ð<ØˆrI   rR   r   FTrŠ   )r   r   r   r   ÚlistÚfloatr   rˆ   r¨   rl   Útestingr   Úinplace_predictrA   r¬   ÚpytestÚraisesÚAssertionError)	r!   rC   rD   rÃ   Ú	booster_0Ú	booster_1Ú	booster_2Ú	booster_3ra   s	   `       @rG   Úrun_reduced_gradrÏ   è   sO  ù€ äØ 2°DÀAô�D€A€qô 
˜˜AÓ	€Bð GKñÜ”iÑ ðÜ.6´t¼E±{Ñ.Cðä	öñ* œ ›Ó(€IÙœ ›Ó(€IÜ‡J�J×ÑØ×!Ñ! !Ó$ i×&?Ñ&?ÀÓ&Bôñ œ ›¨#¨°·±¸±Ñ);Ó<€IÙ˜ ˜u q§w¡w¨q¡zÑ1Ó2€IÜ‡J�J×ÑØ×!Ñ! !Ó$ i×&?Ñ&?ÀÓ&Bôñ ŒV�F˜EÓ"Ô#Ü	�‰”~Ó	&ñ 'Ù”˜ Ó%Ô&÷'÷ 'ñ 'ús   ÅE3Å3E<c           
      óÀ  — t        | «      }d}d}d}dg|z  }| dd|ddœ}g }g }t        |«      D ]W  }	t        d	d|	d
z   |¬«      \  }
}|j                  |j	                  |
«      «       |j                  |j	                  |«      «       ŒY t        ||ddd¬«      }t        || dk(  rdnd¬«      }i }t        ||||dfg|¬«      }t        ||dd¬«      }t        |«      }i }t        ||||dfg|¬«      }t        j                  j                  |d   d   |d   d   «       t        |d   d   «      sJ ‚|j                  «       \  }}}t        | |j                  |«      |j                  |«      «       t        «       }d}| dk(  r$||v r ||   d   dk  rt!        j"                  d«       t        ||ddd|j$                  d   |z  |j$                  d
   z  ¬«      }t        || dk(  rdnd¬«      }i }t        |||dfgt'        | «      ||¬«      }t        j                  j                  |d   d   |d   d   «       t        | |j                  |«      |j                  |«      «       y)z&Test vector leaf with external memory.r(   rÀ   r^   rR   r.   r9   T)r!   r1   r"   r¾   r0   é   r   r¼   NÚcache)rÒ   Úon_hostr„   )Úcache_host_ratior[   )r]   r\   r>   )rÒ   rÂ   ÚTHRUST_VERSIONr   zCCCL version too old.)rÒ   rÓ   Úmin_cache_page_bytesrÁ   )r†   Úranger   ÚappendÚasarrayr   r   r   r   rl   rÆ   r   r    Ú	as_arraysrÇ   r   rÈ   ÚxfailrA   rˆ   )r!   r…   Ú	n_batchesÚn_roundsr~   Ú	interceptrd   ÚXsÚysÚiÚX_iÚy_iÚitra   Úevals_result_0rË   Úevals_result_1rÌ   rC   Ú_ÚbinfoÚtvÚevals_result_2rÍ   s                           rG   Úrun_with_iterrë     s´  € ä
�fÓ
€Cà€IØ€HØ€IØ�˜	Ñ!€Ið Ø-ØØØ!ñ€Fð 
€BØ	€BÜ�9Óò $ˆÜ"Ø q¸¸A¹È)ô
‰ˆˆSð 	�	‰	�#—+‘+˜cÓ"Ô#Ø
�	‰	�#—+‘+˜cÓ"Õ#ð$ô 
˜˜R ¨W¸dÔ	C€BÜ'Ø
 F¨fÒ$4™S¸$ô€Bð ')€NÜØØ
Ø Ø�Gˆ}ˆoØ#ô€Iô 
˜˜R ¨TÔ	2€BÜ	˜Ó	€BØ&(€NÜØØ
Ø Ø�Gˆ}ˆoØ#ô€Iô ‡J�J×ÑØ�wÑ Ñ'¨¸Ñ)@ÀÑ)Hôô ˜.¨Ñ1°&Ñ9Ô:Ð:Ð:Ø�l‰l‹n�G€A€qˆ!Ü�F˜I×5Ñ5°aÓ8¸)×:SÑ:SÐTUÓ:VÔWä‹L€EØ	€BØ�Ò˜B %™K¨E°"©I°a©L¸1Ò,<Ü�‰Ð,Ô-ä	Ø
Ø
ØØØØŸW™W Q™Z¨9Ñ4°q·w±w¸q±zÑAô
€Bô 
˜r¸6ÀVÒ;K±CÐQUÔ	V€Bà&(€NÜØØ
Ø�Gˆ}ˆoÜ�6‹NØ Ø#ô€Iô ‡J�J×ÑØ�wÑ Ñ'¨¸Ñ)@ÀÑ)Hôô �F˜I×5Ñ5°aÓ8¸)×:SÑ:SÐTUÓ:VÕWrI   c                 óŽ   ‡ ‡‡— t        dddd¬«      \  ŠŠdt        t           ddfˆˆ ˆfd	„} |d«        |t        ‰ «      «       y)
zTest for learning rate.i   rU   r)   r^   )r-   r~   r½   r#   Nc                 ó–  •— ‰
dddddœ}t        ‰	‰«      }t        ||d| ¬«      }d|d	<   t        ||d| ¬«      }d
|d	<   t        ||d| ¬«      }|j                  |«      }|j                  |«      }|j                  |«      }t        j                  j                  ||dz  d¬«       t        j                  j                  |dz  |d¬«       y )Nr.   r9   Trf   )r!   r1   r"   r0   r¾   r   )r]   r½   çš™™™™™¹?r"   ç       @r'   g�íµ ÷Æ°>)Úrtolr   )r   r   r_   rl   rÆ   r   )r½   rd   ra   rË   rÌ   rÍ   Úpredt_0Úpredt_1Úpredt_2rC   r!   rD   s            €€€rG   Úrunzrun_eta.<locals>.runo  sÕ   ø€ àØ1Ø Ø!%Øñ
ˆô ˜Q Ó"ˆÜ˜& "°a¸SÔAˆ	Ø"%ˆˆÑÜ˜& "°a¸SÔAˆ	Ø"%ˆˆÑÜ˜& "°a¸SÔAˆ	à×#Ñ# BÓ'ˆØ×#Ñ# BÓ'ˆØ×#Ñ# BÓ'ˆä
�
‰
×"Ñ" 7¨G°b©L¸tÐ"ÔDÜ
�
‰
×"Ñ" 7¨Q¡;°¸dÐ"ÕCrI   )r   r   r   rˆ   )r!   rô   rC   rD   s   ` @@rG   Úrun_etarõ   k  sG   ú€ ä˜3 °ÀÔC�D€A€qðD”œ)Ñ$ð D¨÷ Dñ, ˆ„IÙŒˆv‹ÕrI   c                 óÆ   ‡ ‡‡— t        t        d«      ddd¬«      \  ŠŠdt        fˆˆ ˆfd„} |«       } |«       }|j                  «       }|j                  «       }||k(  sJ ‚y)	z6Check the vector leaf implementation is deterministic.i   é@   rº   r»   r¼   r#   c                  óD   •— t        ‰‰«      } ‰dddœ}t        || d¬«      S )Nr.   T)r!   r1   r0   rU   ©r]   )r   r   )ra   rd   rC   r!   rD   s     €€€rG   rô   zrun_deterministic.<locals>.run�  s0   ø€ Ü˜Q Ó"ˆàØ1Ø!%ñ
ˆô
 �V˜R°Ô4Ð4rI   N)r   r¥   r   Úsave_raw)r!   rô   rË   rÌ   Úraw_0Úraw_1rC   rD   s   `     @@rG   Úrun_deterministicrý   ‰  sb   ú€ äÜ�e“*¨¸$È!ô�D€A€qð5”÷ 5ñ “€IÙ“€IØ×ÑÓ €EØ×ÑÓ €EØ�EŠ>Ð‰>rI   c           	      óÚ  — d}t        d|dd¬«      \  }}t        j                  |dft        j                  ¬«      }d|d	z  z  |d
|d	z   t	        |||¬«      }| ddddœ}t        ||d¬«      }dD ]   }|j                  |¬«      }	t        |	«      dkD  s
J d|› �«       ‚t        d|d	z  «      D ]  }
d|
› �|	v rŒJ d|
› d|› d�«       ‚ t        |d	z  |«      D ]  }
d|
› �|	vrŒJ ‚ |	j                  «       D ]  }t        |t        «      sJ ‚|dk\  rŒJ ‚ Œ¢ t        d¬«      \  }}t        dd| d¬«      }|j                  ||t        j                  d|j                   d   «      ¬«       |j"                  }|d   dk(  sJ ‚|d   |d   dz  kD  sJ ‚t        j$                  j&                  j                  t        j                  d|j                   d   «      |d¬ «      }|j(                  d   d!kD  sJ ‚y
)"zDTest column sampling with feature importance for multi-target trees.é    r|   rº   r^   r¼   r   )rA   Údtyper9   r   N)Úfeature_weightsr.   Tgš™™™™™Ù?)r!   r1   r0   Úcolsample_bynoderU   rù   ©rX   ÚgainÚ
total_gainÚcoverÚtotal_cover©Úimportance_typer   zNo scores for Úfz not in z scoresrK   rX   gš™™™™™É?)r1   r	  r!   r  rf   r;   r»   )Údegg¸…ëQ¸ž?)r   rl   ÚzerosÚfloat32r   r   Ú	get_scoreÚlenr×   ÚvaluesÚ
isinstancerÅ   r   r   r<   ÚarangerA   Úfeature_importances_Ú
polynomialÚ
PolynomialÚcoef)r!   r*   rC   rD   r  ra   rd   rb   r	  Úscoresr
  ÚscorerE   ÚfiÚws                  rG   Úrun_column_samplingr  Ÿ  s=  € à€JÜØ :¸DÈAô�D€A€qô —h‘h j°! _¼B¿J¹JÔG€OØ),°
¸Q±Ñ)?€OÐ%�j A‘oÐ&Ü	˜˜A¨Ô	?€Bð Ø-Ø!Øñ	€Fô �F˜B°Ô3€Gð Tò ˆØ×(Ñ(¸Ð(ÓIˆÜ�6‹{˜QŠÐB .°Ð0AÐ BÓBˆô �q˜*¨™/Ó*ò 	NˆAØ�q�c�7˜fÒ$ÐM¨¨!¨¨H°_Ð4EÀWÐ&MÓMÐ$ð	Nô �z Q‘¨
Ó3ò 	)ˆAØ�q�c�7 &Ò(Ð(Ð(ð	)ð —]‘]“_ò 	ˆEÜ˜e¤UÔ+Ð+Ð+Ø˜A“:Ð�:ñ	ðô" *°tÔ<�D€A€qÜ
Ø*Ø ØØô	€Cð ‡G�GˆAˆq¤"§)¡)¨A¨q¯w©w°q©zÓ":€GÔ;Ø	×	!Ñ	!€BØˆa‰5�CŠ<Ðˆ<Øˆb‰6�B�q‘E˜A‘IÒÐÐä
�‰× Ñ ×$Ñ$¤R§Y¡Y¨q°!·'±'¸!±*Ó%=¸rÀqÐ$ÓI€AØ�6‰6�!‰9�tÒÐÑrI   Úgrow_policyc                 ó�   — t        dddd¬«      \  }}t        ||«      }| dd|dœ}t        ||d	¬
«      }t        |d   d   «      sJ ‚y)z;Test grow policy (depthwise and lossguide) for vector leaf.r|   rU   rº   r^   r¼   r.   T)r!   r1   r0   r  r'   ri   r   rÂ   N)r   r   r   r    )r!   r  rC   rD   ra   rd   r>   s          rG   Úrun_grow_policyr  Ô  sd   € äØ 2°DÀAô�D€A€qô 
˜˜AÓ	€Bð Ø-Ø!Ø"ñ	€Fô   ¨°rÔ:€LÜ˜, wÑ/°Ñ7Ô8Ð8Ñ8rI   c           
      óD  — t        dddd¬«      \  }}t        ||¬«      }t        dddd	| d
ddœd|t        «       g¬«      }t	        t        |«      «      dk(  sJ ‚|j                  |d
¬«      }t        j                  |j                  «      }|D ]  }||j                  |d
¬«      z  }Œ t        j                  j                  ||d¬«       dD ]R  }|j                  |¬«      }	t	        |	«      dkD  sJ ‚|	j                  «       D ]  }
t        |
t        «      sJ ‚|
dk\  rŒJ ‚ ŒT y)z6Test mixed multi_strategy with ResetStrategy callback.r|   rÀ   r^   rº   )rW   r+   r,   r-   ©ÚdataÚlabelr(   r6   r.   Tr   )Únum_parallel_treeÚ	num_classr=   r1   r!   r0   r¾   rU   )r]   r’   r2   )Úoutput_marginr:   )Úatolr  r  N)r
   r   r   r   r  rÄ   r_   rl   r  rA   rÆ   r   r  r  r  rÅ   )r!   rC   rD   ra   rb   ÚpredtÚ	predt_sumÚtr	  r  r  s              rG   Úrun_mixed_strategyr*  æ  s?  € äØ a°1À4ô�D€A€qô 
�a˜qÔ	!€Bäà!"ØØ)Ø1ØØ!%Øñ	
ð ØÜ “?Ð#ô€Gô  Œt�G‹}Ó Ò#Ð#Ð#ð �O‰O˜B¨dˆOÓ3€EÜ—‘˜Ÿ™Ó%€IØò 7ˆØ�Q—Y‘Y˜r°�YÓ6Ñ6‰	ð7ä‡J�J×Ñ˜u i°dÐÔ;ð Tò ˆØ×"Ñ"°?Ð"ÓCˆÜ�6‹{˜QŠÐˆØ—]‘]“_ò 	ˆEÜ˜e¤UÔ+Ð+Ð+Ø˜A“:Ð�:ñ	ñrI   c           	      óŒ  ‡
— dŠ
t        d‰
ddd¬«      \  }}t        ||¬«      }dd| d	d
dœ}t        i |¥ddi¥|d¬«      t        i |¥ddi¥|d¬«      t        i |¥ddi¥|dt        «       g¬«      g}dt        dt
        dt        j                  fˆ
fd„}dD ]¨  }|D �cg c]  } |||«      ‘Œ }	}t        j                  |	d   |	d   «      rJ ‚t        j                  |	d   |	d   «      rJ ‚t        |	d   g|	d   g«      d   dkD  sJ ‚t        |	d   g|	d   g«      d   dkD  sJ ‚t        |	d   g|	d   g«      d   dkD  rŒ¨J ‚ yc c}w )z?Different strategies produce similar feature importance ratios.rU   rT   r'   r(   rº   )rW   r*   r+   r,   r-   r   r6   Tr»   )r$  r=   r!   r0   Ú	max_depthr1   r.   rÿ   rù   Úone_output_per_tree)r]   r2   rb   r	  r#   c           	      ó   •— | j                  |¬«      }t        j                  t        ‰«      D �cg c]  }|j	                  d|› �d«      ‘Œ c}«      }|j                  «       dkD  r||j                  «       z  S |S c c}w )z7Get feature importance as normalized array (sums to 1).r  r
  rf   r   )r  rl   r˜   r×   ÚgetÚsum)rb   r	  r  rá   Úarrr*   s        €rG   Úget_normalized_importancezJrun_feature_importance_strategy_compare.<locals>.get_normalized_importance7  sl   ø€ à×"Ñ"°?Ð"ÓCˆÜ�h‰h¼%À
Ó:KÖL°Q˜Ÿ
™
 Q q c 7¨CÕ0ÒLÓMˆØ"%§'¡'£)¨a¢-ˆs�S—W‘W“Y‰Ð8°SÐ8ùò Ms   °A;r  r   r   r   )r   r   gÍÌÌÌÌÌì?N)
r
   r   r   r   r   Ústrrl   rm   Úallcloser   )r!   rC   rD   ra   Úbase_paramsÚboostersr2  r	  ÚbÚimpsr*   s             @rG   Ú'run_feature_importance_strategy_comparer9    s»  ø€ à€JÜØØØØØô�D€A€qô 
�a˜qÔ	!€Bð Ø%ØØ!Øñ#€Kô 	ØBˆ{ÐBÐ,Ð.AÑBØØô	
ô
 	ØDˆ{ÐDÐ,Ð.CÑDØØô	
ô
 	ØBˆ{ÐBÐ,Ð.AÑBØØÜ$“Ð'ô		
ð€Hð&9¬7ð 9ÄSð 9ÌRÏZÉZõ 9ð Tò CˆØGOÖPÀ!Ñ)¨!¨_Õ=ÐPˆÐPô —;‘;˜t A™w¨¨Q©Ô0Ð0Ð0Ü—;‘;˜t A™w¨¨Q©Ô0Ð0Ð0ô ! $ q¡' ¨T°!©W¨IÓ6°tÑ<¸sÒBÐBÐBÜ  $ q¡' ¨T°!©W¨IÓ6°tÑ<¸sÒBÐBÐBÜ  $ q¡' ¨T°!©W¨IÓ6°tÑ<¸sÓBÐBÐBñCùÚPs   ÂEFT)Úextra_paramsÚcheck_pred_positiveÚcheck_pred_probabilityÚcheck_pred_binaryÚstrictly_non_increasingr=   ÚmetricrC   rD   r:  r;  r<  r=  r>  c                óR  — || ddœ}
|r|
j                  |«       |j                  d   }|j                  dkD  r|j                  d   nd}t        ||«      }i }t	        |
||dfgd|d¬«      }|j                  |«      }|j                  ||fk(  sJ ‚|r|dkD  j                  «       sJ ‚|r(|dkD  j                  «       r|dk  j                  «       sJ ‚|r1t        t        j                  |«      «      j                  d	d
h«      sJ ‚|d   |   }|	rt        |«      sJ ‚y |d   |d   k  sJ ‚y )Nr.   r{   r   r   r[   FrU   r   rf   r9   r;   )ÚupdaterA   Úndimr   r   r_   r`   Úsetrl   ÚuniqueÚissubsetr    )r!   r=   r?  rC   rD   r:  r;  r<  r=  r>  rd   rW   r~   ra   r>   rb   r'  Úmetric_valss                     rG   Ú_run_regression_objective_testrG  L  s>  € ð ØØ-ñ€Fñ
 Ø�‰�lÔ#à—‘˜‘
€IØŸf™f qšj�—‘˜’
¨a€Iä	��A‹€BØ$&€LÜØØ
Ø�Gˆ}ˆoØØ!Øô€Gð �O‰O˜BÓ€EØ�;‰;˜9 iÐ0Ò0Ð0Ð0áØ˜‘	�‰Ô Ð Ð ÙØ˜‘	�‰Ô  e¨a¡i§_¡_Ô%6Ð6Ð6ÙÜ”2—9‘9˜UÓ#Ó$×-Ñ-¨s°C¨jÔ9Ð9Ð9à˜wÑ'¨Ñ/€KÙÜ˜kÔ*Ð*Ñ*à˜2‰ ¨Q¡Ò/Ð/Ñ/rI   c                 óP   — d\  }}t        |d|d¬«      \  }}t        | dd||«       y)z/Test squared error regression with vector leaf.©r|   r^   rU   rV   r}   zreg:squarederrorrÂ   N©r   rG  ©r!   rW   r~   rC   rD   s        rG   Úrun_reg_squarederrorrL    s6   € à"Ñ€IˆyÜØ¨°iÈdô�D€A€qô # 6Ð+=¸vÀqÈ!ÕLrI   c                 ó¾   — d\  }}t         j                  j                  d«      }|j                  |df«      }|j	                  dd||f«      }t        | dd||d¬	«       y
)z:Test logistic regression for probability with vector leaf.rI  rV   rU   rf   r9   zreg:logisticrÂ   T)r<  N)rl   rn   ro   Ústandard_normalrp   rG  ©r!   rW   r~   rq   rC   rD   s         rG   Úrun_reg_logisticrP  ˆ  s`   € à"Ñ€IˆyÜ
�)‰)×
Ñ
 Ó
%€CØ×Ñ˜Y¨˜OÓ,€AØ�‰�C˜˜y¨)Ð4Ó5€AÜ"Ø� ¨¨1ÀTörI   c                 ó¾   — d\  }}t         j                  j                  d«      }|j                  |df«      }|j	                  dd||f«      }t        | dd||d¬«       y	)
z'Test gamma regression with vector leaf.rI  rV   rU   rï   z	reg:gammazgamma-devianceT©r;  N©rl   rn   ro   rN  ÚgammarG  rO  s         rG   Úrun_reg_gammarU  “  sa   € à"Ñ€IˆyÜ
�)‰)×
Ñ
 Ó
%€CØ×Ñ˜Y¨˜OÓ,€AØ�	‰	�#�s˜Y¨	Ð2Ó3€AÜ"Ø�Ð-¨q°!ÈörI   c                 óâ   — d\  }}t         j                  j                  d«      }|j                  |df«      }t        j                  |j                  ||f«      «      dz   }t        | dd||«       y)z3Test squared log error regression with vector leaf.rI  rV   rU   rî   zreg:squaredlogerrorÚrmsleN)rl   rn   ro   rN  r?   rG  rO  s         rG   Úrun_reg_squaredlogerrorrX  ž  sh   € à"Ñ€IˆyÜ
�)‰)×
Ñ
 Ó
%€CØ×Ñ˜Y¨˜OÓ,€AÜ
�‰ˆs×"Ñ" I¨yÐ#9Ó:Ó;¸cÑA€AÜ" 6Ð+@À'È1ÈaÕPrI   c           	      óX   — d\  }}t        |d|d¬«      \  }}t        | dd||ddi¬	«       y
)z4Test pseudo huber error regression with vector leaf.rI  rU   rV   r}   zreg:pseudohubererrorÚmpheÚhuber_sloper9   )r:  NrJ  rK  s        rG   Úrun_reg_pseudohubererrorr\  §  sA   € à"Ñ€IˆyÜØ¨°iÈdô�D€A€qô #ØÐ&¨°°1ÀMÐSVÐCWörI   c                 óJ   — d}t        |d¬«      \  }}t        | dd||d¬«       y)	zCTest binary logitraw with vector leaf (multi-label classification).r|   rV   rK   zbinary:logitrawrL   F)r>  N©r   rG  ©r!   rW   rC   rD   s       rG   Úrun_binary_logitrawr`  ²  s-   € à€IÜ)¨)À$ÔG�D€A€qÜ"ØÐ! 9¨a°ÈEörI   c           	      óL   — d}t        |d¬«      \  }}t        | dd||dd¬«       y	)
zETest binary hinge loss with vector leaf (multi-label classification).r|   rV   rK   zbinary:hingeÚerrorTF)r=  r>  Nr^  r_  s       rG   Úrun_binary_hingerc  »  s4   € à€IÜ)¨)À$ÔG�D€A€qÜ"ØØØØ	Ø	ØØ %örI   c                 óö   — d\  }}t         j                  j                  d«      }|j                  |df«      }|j	                  d||f«      j                  t         j                  «      }t        | dd||d¬«       y	)
z)Test Poisson regression with vector leaf.rI  rV   rU   r»   zcount:poissonzpoisson-nloglikTrR  N)rl   rn   ro   rN  ÚpoissonÚastyper  rG  rO  s         rG   Úrun_count_poissonrg  Ê  sn   € à"Ñ€IˆyÜ
�)‰)×
Ñ
 Ó
%€CØ×Ñ˜Y¨˜OÓ,€AØ�‰�A˜	 9Ð-Ó.×5Ñ5´b·j±jÓA€AÜ"Ø�Ð!2°A°qÈdörI   c                 ó¾   — d\  }}t         j                  j                  d«      }|j                  |df«      }|j	                  dd||f«      }t        | dd||d¬«       y	)
z)Test Tweedie regression with vector leaf.rI  rV   rU   rï   zreg:tweedieztweedie-nloglik@1.5TrR  NrS  rO  s         rG   Úrun_reg_tweedieri  Õ  sb   € à"Ñ€IˆyÜ
�)‰)×
Ñ
 Ó
%€CØ×Ñ˜Y¨˜OÓ,€AØ�	‰	�#�s˜Y¨	Ð2Ó3€AÜ"Ø�Ð4°a¸ÐPTörI   c            	      ód   — t         t        t        t        t        t
        t        t        t        g	} | S )zList of obj tests.)	rL  rP  rU  rX  r\  r`  rc  rg  ri  )Úobjss    rG   Úall_reg_objectivesrl  à  s-   € ô 	ÜÜÜÜ ÜÜÜÜð
,€Dð €KrI   Úsampling_methodc           	      ó   — | ddd|ddddœ}|S )Nrt   r.   rR   é   TrV   )r!   rv   r1   Ú	subsamplerm  r,  r0   Úseedr¦   )r!   rm  rd   s      rG   Ú_make_subsample_paramsrr  ð  s(   € àØØ-ØØ*ØØ!Øñ	€Fð €MrI   c                 ó>  — d}t        |ddd¬«      \  }}t        ||«      }t        | |«      }t        ||d¬«      }t	        |d   d   d	¬
«      sJ ‚t        | |«      }d|d<   g d¢|d<   t        ||dd…df   «      }t        ||d¬«      }	t	        |	d   d   d	¬
«      sJ ‚y)zTest row subsampling.rT   rU   r^   rV   r}   ri   r   rÂ   g{®Gáz„?)Ú	tolerancerP   r=   )g      Ð?rR   g      è?rS   Nr   rk   )r   r   rr  r   r    )
r!   rm  rW   rC   rD   ra   rd   r>   Ú	Xy_singleÚevals_result_qs
             rG   Úrun_subsamplerw  þ  s¿   € à€IÜØ¨°aÀdô�D€A€qô 
˜˜AÓ	€Bä# F¨OÓ<€Fä ¨°rÔ:€Lä˜, wÑ/°Ñ7À4ÕHÐHÐHô $ F¨OÓ<€FØ-€Fˆ;ÑÚ0€FÐÑÜ  1¢Q¨ T¡7Ó+€IÜ! &¨)ÀÔC€NÜ˜.¨Ñ1°*Ñ=ÈÕNÐNÑNrI   c                 ó¼   ‡ ‡‡— d}t        |ddd¬«      \  }}t        ||«      Št        ‰ d«      Šdt        dz  d	dfˆˆ ˆfd
„} |d«        |t	        ‰ d«      «       y)z;Test that gradient-based sampling provides better accuracy.rÑ   rU   r^   rV   r}   rp   r½   Nr#   c           	      ó  •— i }t        ‰‰d‰dfg| d|¬«       t        ‰d«      }i }t        |‰d‰dfg| d|¬«       |d   d   d   }|d   d   d   }t        |d   d   «      sJ ‚t        |d   d   «      sJ ‚| €||k  sJ ‚y y )Nrÿ   r   F)r]   r\   r½   r€   r>   Úgradient_basedrÂ   r;   )r   rr  r    )	r½   Úevals_uniformÚparams_gradÚ
evals_gradÚuniform_finalÚ
grad_finalra   r!   Úparams_uniforms	         €€€rG   rô   z1run_gradient_based_sampling_accuracy.<locals>.run  sÔ   ø€ à)+ˆÜØØØØ˜�=�/ØØØ&õ	
ô -¨VÐ5EÓFˆØ&(ˆ
ÜØØØØ˜�=�/ØØØ#õ	
ð & gÑ.¨vÑ6°rÑ:ˆØ Ñ(¨Ñ0°Ñ4ˆ
Ü˜m¨GÑ4°VÑ<Ô=Ð=Ð=Ü˜j¨Ñ1°&Ñ9Ô:Ð:Ð:Øˆ;Ø Ò-Ð-Ñ-ð rI   F)r   r   rr  r   r¬   )r!   rW   rC   rD   rô   ra   r€  s   `    @@rG   Ú$run_gradient_based_sampling_accuracyr�    si   ú€ à€IÜØ¨°aÀdô�D€A€qô 
˜˜AÓ	€Bä+¨F°IÓ>€Nð.”˜D‘ð . T÷ .ñB ˆ„IÙŒˆv�uÓÕrI   )Tr¤   Útypesr   Útypingr   r   r   r   r   r	   Únumpyrl   rÈ   Úsklearn.datasetsr
   r   r   Úsklearn.metrics.pairwiser   Úxgboost.testingrÆ   r–   Ú_typingr   Úcompatr   Úcorer   r   r   r   r   r=   r   r   Úsklearnr   Útrainingr   r!  r   Úupdaterr   r   Úutilsr   r   r    rÅ   rH   rM   r·   rr   ry   r‚   r†   rˆ   r¨   r¬   rÏ   rë   rõ   rý   r  r3  r  r*  r9  rm   rG  rL  rP  rU  rX  r\  r`  rc  rg  ri  rl  Údictrr  rw  r�  r¦   rI   rG   ú<module>r�     s[  ðÙ &õ ß =× =ã Û ÷ñ õ
 7å å Ý  ß WÕ Wß 0Ý #Ý Ý !ß 0ß :Ñ :ð*˜6ð *°(¸5±/ð *Àdó *ð."˜6ð "°(¸5±/ð "Àdó "ð*"=˜fð "=°ð "=¸ó "=ðJ>˜vð >¨$ó >ð>3˜vð 3¨$ó 3ð2˜ð  :ó ô0ˆ]ô 0ô,0ˆYô 0ô"ˆVô ð&*'˜Vð *'¨ó *'ðZSX˜&ð SX Tó SXðl�Fð ˜tó ð<˜fð ¨ó ð,2 ð 2¨4ó 2ðj9˜Fð 9°ð 9¸ó 9ð$&˜vð &¨$ó &ðR9C°Fð 9C¸tó 9CðH .2Ø %Ø#(Ø#Ø$(ò00Øð00àð00ð ð00ð 
‡z�zð	00ð
 
‡z�zð00ð ˜4  S ™>Ñ*ð00ð ð00ð !ð00ð ð00ð "ð00ð 
ó00ðfM ð M¨Dó Mð˜Vð ¨ó ð˜&ð  Tó ðQ Fð Q¨tó Qð Vð °ó ð ð ¨4ó ð˜Vð ¨ó ð˜fð ¨ó ð˜Fð  tó ð˜D ¨6¨(°D¨.Ñ!9Ñ:ó ð  6ð ¸Cð ÀDó ðO˜&ð O°3ð O¸4ó Oð.,°ð ,¸Dô ,rI   