o
    Ú­j¸  ã                   @   s  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d„Zdedededededdfdd„Z dedededdfdd„Z!dedededdfdd„Z"dS )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                 C   s0   |rt jj|| tttd� dS t j || ¡ dS )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   © r   úV/var/www/html/CropPilot/venv/lib/python3.10/site-packages/xgboost/testing/federated.pyÚ
run_server   s   
ûr   ÚrankÚdevicec              	   C   sª  dd| › �||dœ}|rt |d< t|d< t|d< t ¡ }|dus"J ‚|| }tjjdi |¤Ž�œ td|› d	�ƒ\}}	t 	||	¡}
td|› d
�ƒ\}}	t 	||	¡}ddd|d|dœ}|df|
dfg}d}i }tj
||
||d|d�}t ttt |d d ƒ¡s€J ‚t ttt |d d ƒ¡s�J ‚tj ¡ dkrÃt ¡ �}| tj |d¡¡ W d  ƒ n1 s°w   Y  tj d¡ W d  ƒ dS W d  ƒ dS 1 sÎw   Y  dS )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   )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_envr4   Ú	n_threadsÚXÚyÚdtrainÚdtestÚparamÚ	watchlistÚ	num_roundÚresultsÚbstÚtmpdirr   r   r   Ú
run_worker)   sZ   üú
ú  
ÿÚ#"ÝrO   Úuse_gpuc           	      C   s¦   d}t jt|| |fd�}| ¡  t d¡ | ¡ stdƒ‚g }t| ƒD ] }|r,d|› �nd}t jt	|| |||fd�}| 
|¡ | ¡  q#|D ]}| ¡  qF| ¡  dS )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ÚrangerO   ÚappendrA   Ú	terminate)	r   r   rP   r   ÚserverÚworkersr   r   Úworkerr   r   r   Úrun_federatedf   s&   
ÿ
ÿ


ra   Ú	test_pathc                 C   sî   d}| r d}|j dd� ¡ }t |¡ |j dd� ¡ }t |¡ tj t |¡d¡}tj t |¡d¡}t	|ƒ\}}	t	|ƒ\}
}t
||	dd	�\}}}}t
|
|dd	�\}}}}t||d
ƒ t||dƒ t||dƒ t||dƒ t|| |d� dS )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=localhostr^   )Ú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   rP   N)ÚformatÚsplitÚ
subprocessÚ
check_callr3   r@   rA   r9   Údata_dirr   r   r   ra   )r   rP   rb   Ú	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_validr   r   r   Úrun_federated_learning   s(   

ÿr|   )#Ú__doc__rT   r3   rh   r=   rW   Útypingr   r   Úsklearn.datasetsr   r   Úsklearn.model_selectionr   r   r5   Úxgboost.federatedr   r9   Ú_typingr	   r6   r
   ÚCollArgsr   r   r2   r   ÚintÚboolr   ÚstrrO   ra   r|   r   r   r   r   Ú<module>   sD   ÿÿÿÿÿ
þ=