§
    Ÿ²ÅjÙ  ã                   óä   — 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 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e         fd„Zd„ Zd„ Zdej        fd„ZdS )é    N)Úclosing)ÚOptional)Ú
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               ú\C:\Projects\Historical\venv\Lib\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'   v   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   Útypingr   Útorch.distributedÚdistributedr#   Ú'torch.distributed.elastic.utils.loggingr   Ú%torch.distributed.elastic.utils.storer   Ú__all__Ú__name__r   r*   r4   r3   Úboolr)   ÚintÚfloatr   r'   r   r	   © ó    r/   ú<module>rZ      sm  ðð €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø >Ð >Ð >Ð >Ð >Ð >Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ð IÐ
HÐ
H€à	ˆ�HÑ	Ô	€à*€Ø"€à*€ð ØØØ!ØØ $ðUð UØðUàðUð ðUð ð	Uð
 ðUð ðUð ˜Œ~ðUð Uð Uð Uðp	ð 	ð 	ð%ð %ð %ð04˜fœmð 4ð 4ð 4ð 4ð 4ð 4rY   