
    Гh                        S r SSKrSSKrSSKrSSKrSSKrSSKJrJr  SSK	J
r
Jr  SSKJr  SSKrSSKrSSKJr  SSKJr  SS	KJr  S
rSrSrSrS\S\S\SS4S jrS\S\S\S\S\SS4S jr S\S\S\SS4S jr!S\S\S\SS4S jr"g)zTests for federated learning.    N)Listcast)dump_svmlight_fileload_svmlight_file)train_test_split)testing)TrainingCallback   )_Argszserver-key.pemzserver-cert.pemzclient-key.pemzclient-cert.pemport
world_sizewith_sslreturnc                     U(       a.  [         R                  R                  UU [        [        [
        S9  g[         R                  R                  X5        g)zRun federated server for test.)server_key_pathserver_cert_pathclient_cert_pathN)xgboost	federatedrun_federated_server
SERVER_KEYSERVER_CERTCLIENT_CERT)r   r   r   s      lC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\xgboost/testing/federated.py
run_serverr      sC    ..&(( 	/ 	
 	..z@    rankdevicec           
      "   SSU  3UUS.nU(       a  [         US'   [        US'   [        US'   [        R                  " 5       nUc   eXa-  n[
        R                  R                  " S0 UD6   [        SU S	35      u  p[
        R                  " X5      n
[        SU S
35      u  p[
        R                  " X5      nSSSUSUS.nUS4U
S4/nSn0 n[
        R                  " UU
UUSUS9n[        R                  " [        [        [           US   S   5      5      (       d   e[        R                  " [        [        [           US   S   5      5      (       d   e[
        R                  R!                  5       S:X  al  ["        R$                  " 5        nUR'                  [        R(                  R+                  US5      5        SSS5        [
        R                  R-                  S5        SSS5        g! , (       d  f       N6= f! , (       d  f       g= f)z%Run federated client worker for test.r   z
localhost:)dmlc_communicatorfederated_server_addressfederated_world_sizefederated_rankfederated_server_cert_pathfederated_client_key_pathfederated_client_cert_pathNzagaricus.txt-z.trainz.testr
      zbinary:logistichist)	max_deptheta	objectiventhreadtree_methodr   evaltrain   )evalsearly_stopping_roundsevals_resultloglossr   z
model.jsonzFinished training
 )r   
CLIENT_KEYr   os	cpu_countxgb
collectiveCommunicatorContextr   DMatrixr/   tmnon_increasingr   r   floatget_ranktempfileTemporaryDirectory
save_modelpathjoincommunicator_print)r   r   r   r   r   comm_envr8   	n_threadsXydtraindtestparam	watchlist	num_roundresultsbsttmpdirs                     r   
run_workerrS   )   s   
 )&0$7 *	H 1<-.0:,-1<-.I   'I 
	+	+	7h	7!M$v">?Q"!M$u"=>A! * !
 V_vw&78		 .0ii"# 
   d5k773CI3N!OPPPP  d5k76?93M!NOOOO >>""$),,.&rww||FLAB /NN--.CDM 
8	7H /.I 
8	7s%   +D$H 0G/?'H /
G=	9H  
Huse_gpuc           	         Sn[         R                  " [        X0U4S9nUR                  5         [        R
                  " S5        UR                  5       (       d  [        S5      e/ n[        U 5       HN  nU(       a  SU 3OSn[         R                  " [        X0XaU4S9nUR                  U5        UR                  5         MP     U H  nUR                  5         M     UR                  5         g)z$Launcher for clients and the server.i#  )targetargsr'   z(Error starting Federated Learning serverzcuda:cpuN)multiprocessingProcessr   starttimesleepis_alive
ValueErrorrangerS   appendrE   	terminate)	r   r   rT   r   serverworkersr   r   workers	            r   run_federatedrf   f   s    D$$8 <F LLNJJqM??CDDGj!#*5 ((Ttv$N
 	v "  
r   	test_pathc                    SnU (       ah  SnUR                  SS9R                  5       n[        R                  " U5        UR                  SS9R                  5       n[        R                  " U5        [        R
                  R                  [        R                  " U5      S5      n[        R
                  R                  [        R                  " U5      S5      n[        U5      u  p[        U5      u  p[        XSS	9u  pp[        XSS	9u  nnnn[        XS
5        [        UUS5        [        XS5        [        UUS5        [        X0US9  g)zRun federated learning tests.r
   zvopenssl req -x509 -newkey rsa:2048 -days 7 -nodes -keyout {part}-key.pem -out {part}-cert.pem -subj /C=US/CN=localhostrc   )partclientzagaricus.txt.trainzagaricus.txt.testg      ?)	test_sizezagaricus.txt-0.trainzagaricus.txt-0.testzagaricus.txt-1.trainzagaricus.txt-1.test)r   r   rT   N)formatsplit
subprocess
check_callr7   rD   rE   r=   data_dirr   r   r   rf   )r   rT   rg   	n_workerscommand
server_key
client_key
train_pathX_trainy_trainX_testy_testX0X1y0y1X0_validX1_validy0_validy1_valids                       r   run_federated_learningr      s   I K^^^288:
j)^^^288:
j)bkk)46JKJR[[35HII)*5G'	2NF%g#FNBB-=#.*Hh( r56x+@Ar56x+@AY7Kr   )#__doc__rY   r7   rn   rA   r\   typingr   r   sklearn.datasetsr   r   sklearn.model_selectionr   r   r9   xgboost.federatedr   r=   xgboost.trainingr	   r:   r   CollArgsr   r   r6   r   intboolr   strrS   rf   r   r5   r   r   <module>r      s    #  	     C 4   ! - *

AS Ac AT Ad A:E
:E:E&):E59:ECF:E	:Ezc T D T 2LT LD LS LT Lr   