§
    ŠŠtj  ã                   óÒ   — d dl 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 dl
mZ g d¢Z e	e¦  «        ZdZdZdZ	 	 	 	 	 	 ddedededededededz  fd„Zd„ Zd„ Zdej        fd„ZdS )é    N)Úclosing)Ú
get_logger)Úbarrier)Úcreate_c10d_storeÚget_free_portÚget_socket_with_portzAddress already in usezSocket Timeoutz_tcp_store/num_memberséÿÿÿÿé   éX  Té   Ú	is_serverÚserver_addrÚserver_portÚ
world_sizeÚtimeoutÚwait_for_workersÚ	use_libuvc           	      ó,  — |�t                                d¦  «         t          j                             dd¦  «        dk    }|dk    r|dk    rt          d|› d|› �¦  «        ‚|dk    rt                                d|¦  «         |dk    r|nd}	 |dk    r|}	nt          ¦   «         }	t                                d
||	|| ||¦  «         	 t          j	        ||	|| t          j        |¬¦  «        ||¬¦  «        }
|rt          |
||¬¦  «         t                                d¦  «         |
S # t          $ rc}t          |¦  «        t          k    r@||k     r#t                                d|	||¦  «         |dz  }nt          d|› d|	› d�¦  «        |‚‚ Y d }~nd }~ww xY w�Œ)Nz¸argument use_libuv is deprecated and ignored. Set USE_LIBUV environment variable to "0" to disable libuv, or "1" to enable it. If the env var is not set, libuv will be used by default.Ú	USE_LIBUVÚ1r	   r
   zCserver_port must be specified when world_size > 1, got server_port=z, world_size=z+sever_port: %s, specified, ignoring retriesTziCreating c10d store on %s:%s
  world_size  : %s
  is_server   : %s
  timeout(sec): %s
  use_libuv   : %s
)Úseconds)Ú	host_nameÚportr   Ú	is_masterr   r   r   )r   zSuccessfully created c10d storez)port: %s already in use, attempt: [%s/%s]zon z, port: z already in use)ÚloggerÚwarningÚosÚenvironÚgetÚ
ValueErrorÚinfor   ÚdistÚTCPStoreÚdatetimeÚ	timedeltaÚ_check_full_rankÚRuntimeErrorÚstrÚ_ADDRESS_IN_USE)r   r   r   r   r   r   Úretriesr   Úattemptr   ÚstoreÚes               úi/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/distributed/elastic/utils/distributed.pyr   r      s&  € ð ÐÝ�Šð9ñ	
ô 	
ð 	
õ ”
—’˜{¨CÑ0Ô0°CÒ7€Ià�bÒÐ˜Z¨!š^˜^ÝØxÐR]ÐxÐxÐlvÐxÐxñ
ô 
ð 	
ð �bÒÐÝ�ŠÐAÀ;ÑOÔOÐOð %¨Ò*Ð*ˆgˆg°€Gð7Ø˜"ÒÐØˆDˆDå ‘?”?ˆDå�Šð#ð
 ØØØØØñ	
ô 	
ð 	
ð#	Ý”MØ%ØØ%Ø#Ý Ô*°7Ð;Ñ;Ô;Ø!1Ø#ðñ ô ˆEð  ð EÝ  ¨
¸GÐDÑDÔDÐDÝ�KŠKÐ9Ñ:Ô:Ð:ØˆLøÝð 	ð 	ð 	õ �1‰vŒv�Ò(Ð(Ø˜WÒ$Ð$Ý—N’NØCØØØñ	ô ð ð ˜q‘L�G�Gå&ØH˜kÐHÐH°4ÐHÐHÐHñô àðð ð �G�G�G�Gøøøøð	øøøñG7s   ÃAD$ Ä$
FÄ.AFÆFc                 ó¶   — 	 t          | |t          |¬¦  «         d S # t          $ r2}t          |¦  «        t          k    rt          d|› d�¦  «        |‚‚ d }~ww xY w)N)Ú
key_prefixÚbarrier_timeoutztimed out waiting for all z members to join)r   Ú_TCP_STORE_INITr'   r(   Ú_SOCKET_TIMEOUTÚTimeoutError)r,   r   r   r-   s       r.   r&   r&   u   s|   € ðÝ��z­oÈwÐWÑWÔWÐWÐWÐWøÝð ð ð Ýˆq‰6Œ6•_Ò$Ð$ÝØI¨ZÐIÐIÐIñô àðð øøøøðøøøs   ‚ œ
A¦-AÁAc                  ó¤   — t          ¦   «         } t          | ¦  «        5  |                      ¦   «         d         cddd¦  «         S # 1 swxY w Y   dS )aß  
    Returns an unused port on localhost.

    This function finds an unused port on localhost by opening to socket to bind
    to a port and then closing it.

    Returns:
        int: an unused port on localhost

    Example:
        >>> # xdoctest: +SKIP("Nondeterministic")
        >>> get_free_port()
        63976

    .. note::
        The port returned by :func:`get_free_port` is not reserved and may be
        taken by another process after this function returns.
    r
   N)r   r   Úgetsockname)Úsocks    r.   r   r   �   s“   € õ&  Ñ!Ô!€DÝ	�‰Œð %ð %Ø×ÒÑ!Ô! !Ô$ð%ð %ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð %ð %s   žAÁA	ÁA	Úreturnc                  ó¨  — t          j        ddt           j        t           j        ¬¦  «        } | D ]•}|\  }}}}}t          j         |||¦  «        }	 |                     d¦  «         |                     d¦  «         |c S # t          $ r:}|                     ¦   «          t           	                    d|¬¦  «         Y d}~ŒŽd}~ww xY wt          d¦  «        ‚)	aÄ  
    Returns a free port on localhost that is "reserved" by binding a temporary
    socket on it. Close the socket before passing the port to the entity
    that requires it. Usage example

    ::

    sock = _get_socket_with_port()
    with closing(sock):
        port = sock.getsockname()[1]
        sock.close()
        # there is still a race-condition that some other process
        # may grab this port before func() runs
        func(port)
    Ú	localhostN)Úhostr   ÚfamilyÚtype)r:   r   r   zSocket creation attempt failed.)Úexc_infozFailed to create a socket)ÚsocketÚgetaddrinfoÚ	AF_UNSPECÚSOCK_STREAMÚbindÚlistenÚOSErrorÚcloser   r   r'   )ÚaddrsÚaddrr<   r=   ÚprotoÚ_Úsr-   s           r.   r   r   ™   sø   € õ" ÔØ˜t­FÔ,<Å6ÔCUðñ ô €Eð ð 	Jð 	JˆØ$(Ñ!ˆ��e˜Q ÝŒM˜& $¨Ñ.Ô.ˆð	JØ�FŠFÐ#Ñ$Ô$Ð$Ø�HŠH�Q‰KŒKˆKØˆHˆHˆHøÝð 	Jð 	Jð 	JØ�GŠG‰IŒIˆIÝ�NŠNÐ<ÀqˆNÑIÔIÐIÐIÐIÐIÐIÐIøøøøð	Jøøøõ Ð2Ñ
3Ô
3Ð3s   Á+A>Á>
CÂ0B=Â=C)r	   r
   r   Tr   N)r$   r   r?   Ú
contextlibr   Útorch.distributedÚdistributedr"   Ú'torch.distributed.elastic.utils.loggingr   Ú%torch.distributed.elastic.utils.storer   Ú__all__Ú__name__r   r)   r3   r2   Úboolr(   ÚintÚfloatr   r&   r   r   © ó    r.   ú<module>rX      s[  ðð €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø >Ð >Ð >Ð >Ð >Ð >Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ð IÐ
HÐ
H€à	ˆ�HÑ	Ô	€à*€Ø"€à*€ð ØØØ!ØØ!ðUð UØðUàðUð ðUð ð	Uð
 ðUð ðUð �d‰{ðUð Uð Uð Uðp	ð 	ð 	ð%ð %ð %ð04˜fœmð 4ð 4ð 4ð 4ð 4ð 4rW   