
    iYO                        d Z ddlZddlmZmZ ddlmZ ddlmZm	Z	m
Z
mZmZ ddlZddlZddlmZ ddlmZ 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  ddl!m"Z"m#Z# ddl$m%Z% ddlm&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z. ede"de
e/   fd       Z0edede
e/   fd       Z0ede	e1ef   de
e/   fd       Z0dee"ee	f   de
e/   fdZ0de1de2de,ddfdZ3de,de1de1ddfdZ4de5de5d e5de1de1ddfd!Z6de5de5d e5d"e5de1d#e2d$e2ddfd%Z7d&e5d'ejp                  d(ejp                  d)eddf
d*Z9de1d+e2ddfd,Z:de1de1ddfd-Z; ejx                  ejz                        j|                  Z?dZ@d.e5de5d/e5de1d0e/de1d1e2d2e2d3e2defd4ZAd5e5d6e5d7e5d8e5de1de1d2e2ddfd9ZBd5e5d6e5d8e5de,de1d2e2ddfd:ZCde1de,ddfd;ZDde1de,ddfd<ZEd=e	e1ef   d>ed?e5de	e1ef   fd@ZF G dA dBe      ZGy)CzTests for updaters.    N)partialupdate_wrapper)ascii_lowercase)AnyDictListUnionoverload)make_regression   )TrainingCallback)import_cupy)BoosterDataIterDMatrixExtMemQuantileDMatrixQuantileDMatrix)is_pd_cat_dtype)XGBModelXGBRegressor)train   )IteratorForTestmake_batchesmake_categorical)CatIter)Deviceassert_allclosenon_increasingmodelreturnc                      y N r    s    ]/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/xgboost/testing/updater.pyget_basescorer'      s    36    c                      y r#   r$   r%   s    r&   r'   r'   #   s    25r(   c                      y r#   r$   r%   s    r&   r'   r'   '   s    9<r(   c                     t        | t              r| j                         } t        | t              r| d   d   d   }n,t	        j
                  | j                               d   d   d   }t	        j
                  |      S )z1Get base score from an XGBoost sklearn estimator.learnerlearner_model_param
base_score)
isinstancer   get_boosterdictjsonloadssave_config)r    
jintercepts     r&   r'   r'   +   sv     %"!!#%9%&;<\J
ZZ 1 1 34Y?@UV

 ::j!!r(   tree_methodweighteddevicec                    ddl m} ddlm} d}d}d}t        j
                  j                  d      }t        |||      \  }	}
|r|j                  |      }nd	}t        |	|
|
      }t	        j                  ddg      }t	        j                  |j                  t        j                        }i }t        d| |||d|||dfg|      }|j                  |d      }t        |d   d         sJ |d   d   d   dk  sJ t!        |j"                        D cg c]#  } |t%        t'        ||||         |            % }}t	        j(                  |j                        }t!        |j                  d         D ]  }||   }t        d| ||||   d|||dfg||   |      }t        |d   d         sJ |d   d   d   dk  sJ t        j*                  j-                  t	        j                  |d   d         t	        j                  |d   d         dd       |j                  |      |d	d	|f<    t!        |j                  d         D ]0  }t        j*                  j-                  |d	d	|f   |d	d	|f          2 y	c c}w )zTest for quantile loss.r   )mean_pinball_loss)_metric_decoratori      i  	n_samples
n_featuresrandom_statesizeNweight皙?      ?)shapedtypereg:quantileerror)	objectiver6   r8   quantile_alphar.   Trainnum_boost_roundevalsevals_resultT)strict_shapequantileg      4@)sample_weightalpha)rN   rO   custom_metricrP   g      >@r:   gư>)atolrtol)sklearn.metricsr:   xgboost.sklearnr;   nprandomRandomStater   r   arrayzerosrG   float32r   predictr   rangerB   r   r   emptytestingr   )r6   r7   r8   r:   r;   r>   r?   n_estimatorsrngXyrD   XyrU   r.   rP   booster_multipredt_multiimetricspredtsa	booster_is                          r&   check_quantile_lossrq   <   s   11IJL
))


%CDAq
 +	Af	-BHHc3Z E 2::>J$&L,&#$	
 	$G}o!M  '''>K,w/
;<<< ,R04777 uzz"  	)uQxP!	
G  XXk''(F5;;q>" -!H0* "#(m (=/!!*%
	 l73J?@@@G$Z04t;;;


""HH\'*:67HH\'*+>?@	 	# 	
 !((,q!t3-6 5;;q>" D


""6!Q$<QT1BCDMs   (I=multi_strategyc                    t        ddd      \  }}t        ||      dt        t        t        f   dt        ddffd	}t        j                  g d
      }d|| ||d} ||d       |j                  d       d|d<    ||d       y)z/Test quantile loss with boosting random forest.i      i  r=   paramsmetricr!   Nc                     i }d| d<   t        | ddfg|       i }d| d<   t        | ddfg|       t        j                  j                  |d   |   |d   |          t	        |d   |         sJ y )Nr   num_parallel_treer<   rL   rM   r   )r   r[   rd   r   r   )ru   rv   evals_result_0evals_result_1ri   s       r&   runz#check_quantile_loss_rf.<locals>.run   s    *,&'"#=/'	
 +-&'"#=/'	
 	

""7#F+^G-DV-L	
 nW5f=>>>r(   )rE   rF   g?rI   )rJ   r6   r8   rK   rr   rR   rK   zreg:absoluteerrorrJ   mae)r   r   r   strr   r[   r^   pop)	r8   r6   rr   rg   rh   r{   rU   ru   ri   s	           @r&   check_quantile_loss_rfr      s    
 TbtLDAq	AB?DcN ?C ?D ?6 HH_%E("(F 
 JJ -F;r(   n_samples_per_batchr?   	n_batchesc           	      Z   t        t        | |||dk7        ddd}t        |      }|d|ddgd}t        ||      }|j	                         \  }	}
}t        |	|
|	      }t        ||      }|j                  |      }|j                  |      }t        j                  j                  ||       y
)z2Check external memory with the quantile objective.cpucacheFr   on_hostrI   g?皙?)r6   rJ   r8   rK   rC   N)	r   r   r   r   	as_arraysra   r[   rd   r   )r   r?   r   r6   r8   itXy_itru   
booster_itrg   rh   wri   boosterpredt_itpredts                   r&   check_quantile_loss_extmemr      s     
	):y&E/	R
B
 BKE"(*	F vu%JllnGAq!	Aa	 BFBG!!%(HOOBEJJuh/r(   n_binsr   is_catc                ,   |rt        | ||dddd|d	      }nt        t        | |||dk7        d|d	}t        |||
      }t	        j
                  t        d      5  t        |d|d|d      }	ddd       t        ||d|d      }	|rt        | ||dddd|d	      }nt        t        | |||dk7        ddi}t        |||
      }
t        ||d|
d      }|j                         }|
j                         }t        j                  j                  |d   |d          t        j                  j                  |d   |d          |	j                  |      }|j                  |
      }t        j                  j                  ||       y# 1 sw Y   xY w)z+Basic test for the `ExtMemQuantileDMatrix`.           rF   Fr   )	r   r?   r   n_catssparsity	cat_ratioonehotr8   r   r   use_cupyr   max_binenable_categoricalzOnly the `hist`)matchapprox)r8   r6   r   r<   )rN   N)r8   r   r   r   )r   r   r   r   pytestraises
ValueErrorr   r   get_quantile_cutr[   rd   r   ra   )r   r?   r   r   r8   r   r   r   r   r   ri   r   cut_itcutr   r   s                   r&   check_extmem_qdmr      s     3!

 #ZVu_ 
 ""fPE	z):	; 
h6J


 &V<eUVWJ 3!

 #ZVu_
 	
 
V	GBv&92qQG##%F



CJJvay#a&1JJvay#a&1!!%(HOOBEJJx/K
 
s   F		F	n_entriesindptrdatadtypesc                    |j                   d   |d   k(  sJ |j                   d   | k(  sJ |j                  t        j                  k(  sJ t	        d|j
                        D ]t  }t        ||dz
           }t        ||         }t	        |dz   |      D ]A  }||   ||dz
     kD  sJ t        |j                  |dz
           s/||   ||dz
     dz   k(  rAJ  v y)zCheck the cut values.r   rS   r   N)	rG   rH   r[   uint64rb   rB   intr   iloc)r   r   r   r   rl   begendjs           r&   	check_cutr   1  s     ::a=F2J&&&::a=I%%%<<299$$$1fkk" 2&Q- &)nsQw$ 	2A7T!a%[(((v{{1q512Aw$q1u+/111	22r(   r   c                    ddl }d}d}d}|j                  t        j                  g|z        }t	        j
                  |||      \  }}}	t        |||	|      }
|
j                         \  }}t        |dz   |z  |||       t        |||		      }
t        | |d
|
       |
j                         \  }}t        |dz   |z  |||       d}d}t        t        ||||      ddd}t        |      }t        | |d
|
       |
j                         \  }}t        |dz   |z  |||       d}t        |||dd      \  }}|r0ddl}t               }|j!                  |      }|j#                  |      }t        |||d      }|j                         \  }}t        ||z  |||j$                         t        ||d      }t        | |d
|       |j                         \  }}t        ||z  |||j$                         t        |||ddd      \  }}t'        |j$                  D cg c]  }t)        |      sd c}      }||z
  }||z  |dz   |z  z   }t        |||d      }|j                         \  }}t        ||||j$                         t        ||d      }t        | |d
|       |j                         \  }}t        ||||j$                         yc c}w )zCheck with optional cupy.r   Ni      rt   r   )rD   r   r   rC   )r6   r         r   Fr       r   )r   r   Tr   r   rF   )r   r   r   )pandasSeriesr[   r`   tmr   r   r   r   r   r   r   r   r   cudfr   from_pandasr^   r   lenr   )r6   r   pdr>   r?   r   r   rg   rh   r   Xywr   r   r   r   r   ri   n_categoriesr   cprH   n_cat_featuresn_num_featuresr   s                           r&   check_get_quantile_cut_devicer   B  s   IJGYY

|j01F   JJGAq!"1a7CC'')LFDw{j(&$?
!Qq
!C	+'
:C@'')LFDw{j(&$?I		):y(	K
B
 "+B	+'
:C@'')LFDw{j(&$? L:|ECDAq ]QHHQK	Aw4	HB&&(LFDlZ'qxx@	A$	/B	+'
:B?&&(LFDlZ'qxx@ :|ECSVDAq L_U5K!LMN.0N~-10NNI	Aw4	HB&&(LFDiqxx0	A$	/B	+'
:B?&&(LFDiqxx0 Ms   K	(K	c                 \    |j                  d      }t        | d       |rt        | d       yy)zCheck the quantile cut getter.cudaFTN)
startswithr   )r6   r8   r   s      r&   check_get_quantile_cutr     s0       (H!+u5%k48 r(   r>   r   r   r   extmemr   c                   t        t        d|       d      }	t        | |	z  ||	|d||||rdnd 	      }
|r7|dk(  rt        |
|      }|S |dk(  rt	        |
|      }|S t        d	| d
      |
j                         \  }}t	        |||      }|S )Nr   r         ?r   )r   r   r   r   r   r8   r   histr   r   ztree_method z not supported.)maxminr   r   r   r   xy)r>   r?   r   r8   r   r6   r   r   r   r   r   ri   catlabels                 r&   _create_dmatrixr     s     C9%q)I	YgT

B & /'9B I H$0BCB I	 |K=HIIUUW
US%4FGIr(   rowscolsroundscatsc                    i }i }|t         |d}	t        | |||dd||d	      }
t        |	|
||
dfg|       t        | |||d|d|d	      }t        |	|||dfg|       t        j                  j                  t        j                  |d   d	         t        j                  |d   d	         d
       t        |d   d	         sJ i }t        |	d<   d|	d<   t        |	|||dfg|       |d   d	   }|d   d	   }t        ||      D ]  \  }}||k\  rJ  d|	d<   i }t        |	|d|dfg|       t        |d   d	         sJ |       y)z0Test for one-hot encoding with categorical data.)r6   max_cat_to_onehotr8   r   TF)r   r8   r   r   r6   r   r   rL   rM   )r   r8   r   r6   r   r   r   rmsegMbP?rX   r   r   
reg_lambdar   r   N)

USE_ONEHOTr   r   r[   rd   r   r^   r   USE_PARTzip)r   r   r   r   r8   r6   r   by_etl_resultsby_builtin_results
parameters	Xy_onehotXy_catby_groupingrmse_oh
rmse_groupro   bs                    r&   check_categorical_oher     s    9;N<> #'	"J   
I 
7#$# 
F 
 !' JJ
(01
#G,V45  
 ,W5f=>>>57K&.J"# J|	 !  !)&1GW%f-JGZ( 1Avv  #J|K	 !  +g.v67DD7r(   c                   	 |d	t        | ||d|d|d	      j                         dt        ddf	fd	} |t                |t               y)
z+Check categorical data with missing values.r6   r8   rF   FT)r   r   r8   r6   r   r   r   r   r!   Nc                     | d<   i }t        ddfg|      }t        |d   d         sJ |j                        }t        j                  |      }t        ||d   d   d   d       y )	Nr   r<   rL   rM   r   rS   gh㈵>r   )r   r   ra   r   root_mean_squarer   )	r   rP   r   y_predtr   ri   r8   r   r   s	        r&   r{   z&check_categorical_missing.<locals>.run<  s    *;
&'(*=/%
 l73F;<<<//"%""5'2l7&;F&CB&GdSr(   )r   	get_labelr   r   r   )
r   r   r   r8   r6   r   r{   ri   r   r   s
      `   @@@r&   check_categorical_missingr   $  so     2=!OJ	

B LLNETs Tt T T$ 
O Mr(   c                    ddl }t        j                  j                  d      }d}d}|j	                  t        |      D cg c]1  }dj                  |j                  t        t              d            3 c}d	      d| j                         }t        d
| |d      }|j	                  t        |            }	|j                  ||	||	fg       t        |j                         d   d         sJ yc c}w )z6Test data with size smaller than number of categories.r   Nd   r    r   rA   category)rH   T
   )r   r6   r8   re   )rg   rh   eval_setvalidation_0r   )r   r[   r\   default_rngr   rb   joinchoicelistr   to_framer   fitr   rP   )
r6   r8   r   rf   n_catnrl   rg   regrh   s
             r&   run_max_catr  T  s    
))


"CE	A
		EJ5\RD1:	;R 	 	 	q	
 (* 
 	C 			%(AGGa1AxG(#**,^<VDEEE 	Ss    6C2c                 D   t         j                  j                         }|j                  ddd      j	                  dd      }|j                  ddd      }t        j                  t         j                        j                  dz   |d	<   t        ||d
gdz        }t        j                  t              5  t        | |d|       ddd       d|d	<   t        ||d
gdz        }t        j                  t              5  t        | |d|       ddd       |j                  ddd      j	                  dd      }|j                  ddd      }t        ||d
gdz        }t        j                  t              5  t        | |d|       ddd       |dk(  r[ddl}|j                  |      |j                  |      }}t        j                  t              5  t!        ||d
gdz         ddd       yy# 1 sw Y   .xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z%Test with invalid categorical inputs.r      i  )lowhighrB   r   r   r   )locscalerB   )      c)feature_typesr   Ni   r   )r[   r\   r   integersreshapenormaliinfoint32r   r   r   r   r   r   cupyr^   r   )r6   r8   rf   rg   rh   ri   r   s          r&   run_invalid_categoryr  l  s   
))


!C.66sB?A

q
,Axx!%%)AeH 
AcURZ	0B	z	" BkV<bAB AeH	AcURZ	0B	z	" BkV<bAB 	

q
-55c2>A

q
,A	AcURZ	0B	z	" BkV<bAB xx{BHHQK1]]:& 	<Aq
;	< 	<	 !B B
B BB B	< 	<s0   5G1=G>8H
H1G;>H
HHparamdmat
num_roundsc                    i }t        | |||dfgd|      }|j                         |j                         k(  sJ |j                         |k(  sJ |j                  |j                  k(  sJ |j
                  |j
                  k(  sJ |S )z-Get training result from parameters and data.r   F)rO   verbose_evalrP   )r   num_featuresnum_colnum_boosted_roundsfeature_namesr  )r  r  r  resultr   s        r&   train_resultr    s      FgG !T\\^333%%':555  D$6$6666  D$6$6666Mr(   c                   (    e Zd ZdZdedededefdZy)ResetStrategyz"Callback for testing multi-output.r    epoch	evals_logr!   c                 b    |dz  dk(  r|j                  ddi       y|j                  ddi       y)Nr   r   rr   multi_output_treeone_output_per_treeF)	set_param)selfr    r!  r"  s       r&   after_iterationzResetStrategy.after_iteration  s=    19>OO-/BCD  OO-/DEFr(   N)	__name__
__module____qualname____doc__r   r   r1   boolr(  r$   r(   r&   r   r     s&    ,W S T d r(   r   )Hr,  r2   	functoolsr   r   stringr   typingr   r   r   r	   r
   numpyr[   r   sklearn.datasetsr   xgboost.testingrd   r   callbackr   compatr   corer   r   r   r   r   r   r   sklearnr   r   trainingr   r   r   r   	data_iterr   utilsr   r   r   floatr'   r}   r-  rq   r   r   r   r   ndarrayr   r   r   r  r  r   r   r   r   r   r   r  r  r  r   r$   r(   r&   <module>r=     s     - " 3 3   ,  '    # ,  A A  : : 
 6 6d5k 6 
 6 
 5 5T%[ 5 
 5 
 <c3h <DK < 
 <"7D()"	%[""VDS VDD VD& VDT VDr00!$0690	0f000 0 	0
 0 
0>G0G0G0 	G0
 G0 G0 G0 G0 
G0T22JJ2.0jj2BE2	2"F1s F1d F1t F1R9 9S 9T 9 RXXbhh##
$$$ 	$
 $ $ $ $ $ $ $NbE
bE bE 	bE
 bE bE bE bE 
bEJ-
-
- -
 - - - 
-`FS F& FT F0<c <6 <d <DS>!(69	#s(^*$ r(   