Ë
    :�Dj„  ã                   ó¼   — d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	m
Z
mZ ddlmZ  G d„ d	e«      Z	 	 	 	 	 dd
ededee   dee   dee   dededeeeef      fd„Zy)z4XGBoost Experimental Federated Learning related API.é    N)ÚThread)ÚAnyÚDictÚOptionalé   )Ú_LIBÚ_check_callÚmake_jcargs)ÚRabitTrackerc                   óT   — e Zd ZdZ	 	 	 	 ddedededee   dee   dee   d	ed
dfd„Zy)ÚFederatedTrackera÷  Tracker for federated training.

    Parameters
    ----------
    n_workers :
        The number of federated workers.

    port :
        The port to listen on.

    secure :
        Whether this is a secure instance. If True, then the following arguments for SSL
        must be provided.

    server_key_path :
        Path to the server private key file.

    server_cert_path :
        Path to the server certificate file.

    client_cert_path :
        Path to the client certificate file.

    NÚ	n_workersÚportÚsecureÚserver_key_pathÚserver_cert_pathÚclient_cert_pathÚtimeoutÚreturnc                 óÖ   — t        j                  «       }t        ||d||||t        |«      ¬«      }	t	        t        j                  |	t        j                  |«      «      «       || _        y )NÚ	federated)r   r   Údmlc_communicatorÚfederated_securer   r   r   r   )	ÚctypesÚc_void_pr
   Úintr	   r   ÚXGTrackerCreateÚbyrefÚhandle)
Úselfr   r   r   r   r   r   r   r   Úargss
             úUC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\xgboost/federated.pyÚ__init__zFederatedTracker.__init__%   s]   € ô —‘Ó"ˆÜØØØ)Ø#Ø+Ø-Ø-Ü˜“Lô	
ˆô 	”D×(Ñ(¨¬v¯|©|¸FÓ/CÓDÔEØˆ�ó    )NNNé,  )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úboolr   Ústrr#   © r$   r"   r   r      st   „ ñð< *.Ø*.Ø*.Øñàðð ðð ð	ð
 " #™ðð # 3™-ðð # 3™-ðð ðð 
ôr$   r   r   r   r   r   r   Úblockingr   r   c           	      ó:  — d| i}t        d„ |||fD «       «      }t        | ||||||¬«      }	|	j                  «        |r|	j                  «        yt	        |	j                  ¬«      }
d|
_        |
j                  «        |j                  |	j                  «       «       |S )a|  See :py:class:`~xgboost.federated.FederatedTracker` for more info.

    Parameters
    ----------
    blocking :
        Block the server until the training is finished. If set to False, the function
        launches an additional thread and returns the worker arguments. The default is
        True and a higher level framework is responsible for setting worker parameters.

    r   c              3   ó$   K  — | ]  }|d u–— Œ
 y ­w)Nr,   )Ú.0Úpaths     r"   ú	<genexpr>z'run_federated_server.<locals>.<genexpr>R   s   è ø€ ò àð 	�DÔñùs   ‚)r   r   r   r   r   r   r   N)ÚtargetT)Úallr   ÚstartÚwait_forr   ÚdaemonÚupdateÚworker_args)r   r   r   r   r   r-   r   r!   r   ÚtrackerÚthreads              r"   Úrun_federated_serverr<   >   s¦   € ð& (¨Ð3€DÜñ à$Ð&6Ð8HÐIôó €Fô ØØØØØ'Ø)Ø)ô€Gð ‡M�M„OáØ×ÑÔØä˜7×+Ñ+Ô,€FØ€F„MØ
‡L�L„NØ‡K�K�×#Ñ#Ó%Ô&Ø€Kr$   )NNNTr%   )r)   r   Ú	threadingr   Útypingr   r   r   Úcorer   r	   r
   r:   r   r   r   r+   r*   r<   r,   r$   r"   ú<module>r@      s¥   ðÙ :ã Ý ß &Ñ &ç 0Ñ 0Ý !ô0�|ô 0ðl &*Ø&*Ø&*ØØñ+Øð+à
ð+ð ˜c‘]ð+ð ˜s‘mð	+ð
 ˜s‘mð+ð ð+ð ð+ð ˆd�3˜�8‰nÑô+r$   