
    ^i                        d 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mZ ddl	m
Z
mZ ddl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
ZdZdZdZdedededdfdZdedededededdfdZ dedededdfdZ!dedededdfdZ"y)zTests for federated learning.    N)Listcast)dump_svmlight_fileload_svmlight_file)train_test_split)testing   )EvalsLog)_Argszserver-key.pemzserver-cert.pemzclient-key.pemzclient-cert.pemport
world_sizewith_sslreturnc                     |r1t         j                  j                  || t        t        t
               yt         j                  j                  ||        y)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      Z/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/xgboost/testing/federated.py
run_serverr      sE    ..&(( 	/ 	
 	..z4@    rankdevicec           	         dd|  ||d}|rt         |d<   t        |d<   t        |d<   t        j                         }|J ||z  }t        j                  j                  di |5  t        d| d	      \  }}	t        j                  ||	      }
t        d| d
      \  }}	t        j                  ||	      }ddd|d|d}|df|
dfg}d}i }t        j                  ||
||d|      }t        j                  t        t        t           |d   d               sJ t        j                  t        t        t           |d   d               sJ t
        j                  j!                         dk(  rkt#        j$                         5 }|j'                  t        j(                  j+                  |d             ddd       t
        j                  j-                  d       ddd       y# 1 sw Y   1xY w# 1 sw Y   yxY w)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   Z'I 
	+	+	7h	7 &E!M$v">?1Q"!M$u"=>1Aq! * !
 V_vw&78		 ii"# 
   d5k773CI3N!OPPP  d5k76?93M!NOOO >>""$),,. C&rww||FLABCNN--.CDM&E &EHC CI&E &Es%   $DG*>0G.'G*G'	#G**G3use_gpuc           	         d}t        j                  t        || |f      }|j                          t	        j
                  d       |j                         st        d      g }t        |       D ]L  }|rd| nd}t        j                  t        || |||f      }|j                  |       |j                          N |D ]  }|j                           |j                          y)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$$z8 <F LLNJJqM??CDDGj! #*5 ((T:tXv$N
 	v  
r   	test_pathc                    d}| rld}|j                  d      j                         }t        j                  |       |j                  d      j                         }t        j                  |       t        j
                  j                  t        j                  |      d      }t        j
                  j                  t        j                  |      d      }t        |      \  }}	t        |      \  }
}t        ||	d	      \  }}}}t        |
|d	      \  }}}}t        ||d
       t        ||d       t        ||d       t        ||d       t        || |       y)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GW'	2NFF%gw#FNBB-=#.*Hh( r256x+@Ar256x+@AY7Kr   )#__doc__rY   r7   rn   rA   r\   typingr   r   sklearn.datasetsr   r   sklearn.model_selectionr   r   r9   xgboost.federatedr   r=   _typingr
   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   