o
    Ù­jî  ã                   @   s¸   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mZ ddlmZ G dd	„ d	eƒZedddd
d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d„ƒZdS )z4XGBoost Experimental Federated Learning related API.é    N)ÚThread)ÚAnyÚDictÚOptionalé   )Ú_LIBÚ_check_callÚ_deprecate_positional_argsÚmake_jcargs)ÚRabitTrackerc                   @   sV   e Zd ZdZedddddœdedededee d	ee d
ee deddfdd„ƒZ	dS )Ú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é,  )Úserver_key_pathÚserver_cert_pathÚclient_cert_pathÚtimeoutÚ	n_workersÚportÚsecurer   r   r   r   Úreturnc          
   
   C   sD   t  ¡ }t||d||||t|ƒd�}	tt |	t  |¡¡ƒ || _d S )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   Úargs© r!   úN/var/www/html/CropPilot/venv/lib/python3.10/site-packages/xgboost/federated.pyÚ__init__%   s   ø

zFederatedTracker.__init__)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   Úboolr   Ústrr#   r!   r!   r!   r"   r      s0    ÷þýûúùø	÷
ör   Tr   )r   r   r   Úblockingr   r   r   r   r   r   r*   r   r   c             	   C   sz   d| i}t dd„ |||fD ƒƒ}t| ||||||d�}	|	 ¡  |r'|	 ¡  dS t|	jd�}
d|
_|
 ¡  | |	 ¡ ¡ |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                 s   s   � | ]}|d uV  qd S )Nr!   )Ú.0Úpathr!   r!   r"   Ú	<genexpr>V   s
   € ÿ
ÿz'run_federated_server.<locals>.<genexpr>)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Úthreadr!   r!   r"   Úrun_federated_server@   s,   þù	r7   )r'   r   Ú	threadingr   Útypingr   r   r   Úcorer   r   r	   r
   r5   r   r   r   r)   r(   r7   r!   r!   r!   r"   Ú<module>   s<    5øÿþüûúùø	÷