Ë
    g^(h#  ã                   óà   — 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y)é    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Ú	is_serverÚserver_addrÚserver_portÚ
world_sizeÚtimeoutÚwait_for_workersÚ	use_libuvc           	      óÀ  — |�t         j                  d«       t        j                  j	                  dd«      dk(  }|dk(  r|dkD  rt        d|› d|› �«      ‚|dk7  rt         j                  d|«       |dk(  r|nd}	 |dk7  r|}	n
t        «       }	t         j                  d	||	|| ||«       	 t        j                  ||	|| t        j                  |¬
«      ||¬«      }
|rt        |
||¬«       t         j                  d«       |
S # t        $ rS}t        |«      t        k(  r6||k  rt         j                  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Ú1éÿÿÿÿé   zCserver_port must be specified when world_size > 1, got server_port=z, world_size=z+sever_port: %s, specified, ignoring retriesziCreating 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/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/distributed/elastic/utils/distributed.pyr   r      sœ  € ð ÐÜ�‰ð9ô	
ô —
‘
—‘˜{¨CÓ0°CÑ7€Ià�bÒ˜Z¨!š^ÜØQÐR]ÐQ^Ð^kÐlvÐkwÐxó
ð 	
ð �bÒÜ�‰ÐAÀ;ÔOð %¨Ò*‰g°€GØ
Ø˜"ÒØ‰Dä “?ˆDä�‰ð#ð
 ØØØØØô	
ð#	Ü—M‘MØ%ØØ%Ø#Ü ×*Ñ*°7Ô;Ø!1Ø#ôˆEñ  Ü  ¨
¸GÕDÜ�K‰KÐ9Ô:ØˆLøÜò 	ô �1‹vœÒ(Ø˜WÒ$Ü—N‘NØCØØØô	ð ˜q‘L‘Gä&Ø˜k˜]¨(°4°&¸ÐHóàðð ô ûð	úðG s   Â)AD  Ä 	EÄ	A	EÅEc                 ó”   — 	 t        | |t        |¬«       y # t        $ r(}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   sS   € ðÜ��z¬oÈwÖWøÜò Üˆq‹6”_Ò$ÜØ,¨Z¨LÐ8HÐIóàðð ûðús   ‚ –	AŸ#AÁAc                  ó~   — t        «       } t        | «      5  | j                  «       d   cddd«       S # 1 sw Y   yxY w)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   ‚   s9   € ô&  Ó!€DÜ	�‹ñ %Ø×ÑÓ! !Ñ$÷%÷ %ò %ús   –3³<Úreturnc                  ó”  — t        j                  ddt         j                  t         j                  ¬«      } | D ]G  }|\  }}}}}t        j                   |||«      }	 |j	                  d«       |j                  d«       |c S  t        d«      ‚# t        $ r1}|j                  «        t        j                  d|¬«       Y d}~ŒŠd}~ww xY w)	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)r9   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ÑCUô€Eð ò 	JˆØ$(Ñ!ˆ��e˜Q Ü�M‰M˜& $¨Ó.ˆð	JØ�F‰FÐ#Ô$Ø�H‰H�QŒKØŠHð	Jô Ð2Ó
3Ð3øô ò 	JØ�G‰GŒIÜ�N‰NÐ<ÀqˆN×IÑIûð	Jús   Á#BÂ	CÂ'CÃC)r   r   iX  Té   N)r#   r   r>   Ú
contextlibr   Útypingr   Útorch.distributedÚdistributedr!   Ú'torch.distributed.elastic.utils.loggingr   Ú%torch.distributed.elastic.utils.storer   Ú__all__Ú__name__r   r(   r2   r1   Úboolr'   ÚintÚfloatr   r%   r   r	   © ó    r-   ú<module>rY      sÂ   ðó Û 	Û Ý Ý å  Ý >Ý 9ò I€á	�HÓ	€à*€Ø"€à*€ð ØØØ!ØØ $ñUØðUàðUð ðUð ð	Uð
 ðUð ðUð ˜‰~óUòp	ò%ð04˜fŸm™mô 4rX   