§
    Ÿ²Åjï!  ã                   ó>  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZmZmZmZmZmZ dgZdedeeef         fd„Zd	edee         fd
„Zdee         dedeeef         fd„Zdedefd„Zdeeeeef         f         ddfd„Z G d„ d¦  «        ZdS )é    N)Ú	timedelta)ÚEventÚThread)ÚAnyÚCallableÚDictÚOptionalÚTupleÚUnionÚparse_rendezvous_endpointÚ
config_strÚreturnc                 óZ  — i }|                       ¦   «         } | s|S |                      d¦  «        }|D ]x}|                     dd¦  «        ^}}|                      ¦   «         }|st          d¦  «        ‚|r|d                               ¦   «         }nd}|st          d|› d�¦  «        ‚|||<   Œy|S )	z§Extract key-value pairs from a rendezvous configuration string.

    Args:
        config_str:
            A string in format <key1>=<value1>,...,<keyN>=<valueN>.
    ú,ú=é   zZThe rendezvous configuration string must be in format <key1>=<value1>,...,<keyN>=<valueN>.r   Nz%The rendezvous configuration option 'z' must have a value specified.)ÚstripÚsplitÚ
ValueError)r   ÚconfigÚ
key_valuesÚkvÚkeyÚvaluesÚvalues          ú[C:\Projects\Historical\venv\Lib\site-packages\torch/distributed/elastic/rendezvous/utils.pyÚ_parse_rendezvous_configr      sê   € ð  €Fà×!Ò!Ñ#Ô#€JØð Øˆà×!Ò! #Ñ&Ô&€JØð ð ˆØ—x’x  QÑ'Ô'ˆˆˆfà�iŠi‰kŒkˆØð 	Ýð7ñô ð ð ð 	Ø˜1”I—O’OÑ%Ô%ˆEˆEàˆEØð 	ÝØ[¸Ð[Ð[Ð[ñô ð ð ˆˆs‰ˆØ€Mó    Úport_strc                 óR   — | r$t          j        d| ¦  «        rt          | ¦  «        S dS )z1Try to extract the port number from ``port_str``.z^[0-9]{1,5}$N)ÚreÚmatchÚint)r   s    r   Ú_try_parse_portr$   <   s.   € àð •B”H˜_¨hÑ7Ô7ð Ý�8‰}Œ}ÐØˆ4r   ÚendpointÚdefault_portc                 óú  — | �|                       ¦   «         } | sd|fS | d         dk    r| d         dk    r	| gg ¢R ^}}n|                      dd¦  «        ^}}t          |¦  «        dk    r"|d         dk    r|d         dk    r
|dd…         }t          |¦  «        dk    r1t          |d         ¦  «        }|�|d	k    rt	          d
| › d�¦  «        ‚n|}t          j        d|¦  «        st	          d| › d�¦  «        ‚||fS )a4  Extract the hostname and the port number from a rendezvous endpoint.

    Args:
        endpoint:
            A string in format <hostname>[:<port>].
        default_port:
            The port number to use if the endpoint does not include one.

    Returns:
        A tuple of hostname and port number.
    NÚ	localhostr   ú[éÿÿÿÿú]ú:r   i   z,The port number of the rendezvous endpoint 'z)' must be an integer between 0 and 65536.z^[\w\.:-]+$z)The hostname of the rendezvous endpoint 'zN' must be a dot-separated list of labels, an IPv4 address, or an IPv6 address.)r   ÚrsplitÚlenr$   r   r!   r"   )r%   r&   ÚhostÚrestÚports        r   r   r   C   sT  € ð ÐØ—>’>Ñ#Ô#ˆàð +Ø˜\Ð*Ð*ð �„{�cÒÐ˜h rœl¨cÒ1Ð1Ø�m �m�mˆˆˆtˆtà—o’o c¨1Ñ-Ô-ˆˆˆtõ ˆ4�y„y�1‚}€}˜˜aœ Cš˜¨D°¬H¸ªO¨OØ�A�b�DŒzˆå
ˆ4�y„y�A‚~€~Ý˜t AœwÑ'Ô'ˆØˆ<˜4 5š=˜=Ýð'¸xð 'ð 'ð 'ñô ð ð )ð ˆåŒ8�N DÑ)Ô)ð 
Ýð;¸ð ;ð ;ð ;ñ
ô 
ð 	
ð
 �ˆ:Ðr   r/   c                 ón  — | dk    rdS 	 t          j        | ¦  «        }n# t          $ r d}Y nw xY w|r	|j        rdS 	 t	          j        | dt          j        t          j        ¬¦  «        }n%# t          t          j        f$ r}g }Y d}~nd}~ww xY wd„ |D ¦   «         }t	          j	        ¦   «         }| |k    rdS t	          j        |dt          j        t          j        ¬¦  «        }|D ]P}|d         r|d         | k    r dS |r"|d         d         t          |¦  «        k    r dS |d         d         |v r dS ŒQd	S )
a<  Indicate whether ``host`` matches the hostname of this machine.

    This function compares ``host`` to the hostname as well as to the IP
    addresses of this machine. Note that it may return a false negative if this
    machine has CNAME records beyond its FQDN or IP addresses assigned to
    secondary NICs.
    r(   TN)ÚprotoÚflagsc                 ó*   — g | ]}|d          d         ‘ŒS )é   r   © )Ú.0Úhost_addr_infos     r   ú
<listcomp>z-_matches_machine_hostname.<locals>.<listcomp>Ž   s"   € ÐNÐNÐN¨^�N 1Ô% aÔ(ÐNÐNÐNr   é   r6   r   F)Ú	ipaddressÚ
ip_addressr   Úis_loopbackÚsocketÚgetaddrinfoÚIPPROTO_TCPÚAI_CANONNAMEÚgaierrorÚgethostnameÚstr)r/   ÚaddrÚhost_addr_listÚ_Úhost_ip_listÚ	this_hostÚ	addr_listÚ	addr_infos           r   Ú_matches_machine_hostnamerM   t   s©  € ð ˆ{ÒÐØˆtðÝÔ# DÑ)Ô)ˆˆøÝð ð ð Øˆˆˆðøøøð ð �Ô ð ØˆtðÝÔ+Ø�$�fÔ0½Ô8Kð
ñ 
ô 
ˆˆøõ �œÐ(ð ð ð Øˆˆˆˆˆˆøøøøðøøøð OÐN¸~ÐNÑNÔN€LåÔ"Ñ$Ô$€IØˆyÒÐØˆtåÔ"Ø�4�vÔ1½Ô9Lðñ ô €Ið ð ð ˆ	à�QŒ<ð 	˜I aœL¨DÒ0Ð0Ø�4�4ð ð 	�I˜a”L ”O¥s¨4¡y¤yÒ0Ð0Ø�4�4ð �QŒ<˜Œ?˜lÐ*Ð*Ø�4�4ð +ð ˆ5s#   Š Ÿ.­.½,A* Á*BÂ BÂBÚsecondsc                 ó„   — t          | t          ¦  «        rt          j        | Ž } | dk    rt	          j        | ¦  «         dS dS )z×Suspend the current thread for ``seconds``.

    Args:
        seconds:
            Either the delay, in seconds, or a tuple of a lower and an upper
            bound within which a random delay will be picked.
    g{®Gáz„?N)Ú
isinstanceÚtupleÚrandomÚuniformÚtimeÚsleep)rN   s    r   Ú_delayrV   ¨   sH   € õ �'�5Ñ!Ô!ð +Ý”. 'Ð*ˆà�$‚€ÝŒ
�7ÑÔÐÐÐð €r   c            
       ó"  — e Zd ZU dZ G d„ d¦  «        Zee         ed<   ee         ed<   ee	j
                 ed<   eed<   ded	ed
         dededdf
d„Zedee         fd„¦   «         Zdeddfd„Zdd„Zdd„Zedd„¦   «         Zed„ ¦   «         ZdS )Ú_PeriodicTimerzËRepresent a timer that periodically runs a specified function.

    Args:
        interval:
            The interval, in seconds, between each run.
        function:
            The function to run.
    c                   ón   — e Zd ZU eed<   ed         ed<   eedf         ed<   ee	ef         ed<   e
ed<   dS )	ú_PeriodicTimer._ContextÚinterval©.NÚfunction.ÚargsÚkwargsÚ
stop_eventN)Ú__name__Ú
__module__Ú__qualname__ÚfloatÚ__annotations__r   r
   r   r   rE   r   r7   r   r   Ú_ContextrZ   Ã   s`   € € € € € € Øˆˆ‰Ø˜9Ô%Ð%Ð%Ñ%Ø�C˜�HŒoÐÐÑØ�S˜#�X”ÐÐÑØÐÐÑÐÐr   rf   Ú_nameÚ_threadÚ
_finalizerÚ_ctxr[   r]   r\   r^   r_   r   Nc                 ó  — d | _         |                      ¦   «         | _        |                     ¦   «         | j        _        || j        _        |pd| j        _        |pi | j        _        t          ¦   «         | j        _	        d | _
        d | _        d S )Nr7   )rg   rf   rj   Útotal_secondsr[   r]   r^   r_   r   r`   rh   ri   )Úselfr[   r]   r^   r_   s        r   Ú__init__z_PeriodicTimer.__init__Ñ   su   € ð ˆŒ
à—M’M‘O”OˆŒ	Ø%×3Ò3Ñ5Ô5ˆŒ	ÔØ%ˆŒ	ÔØ˜ ˆŒ	ŒØ!˜< RˆŒ	ÔÝ$™wœwˆŒ	ÔàˆŒØˆŒˆˆr   c                 ó   — | j         S )zGet the name of the timer.)rg   ©rm   s    r   Únamez_PeriodicTimer.nameä   s   € ð ŒzÐr   rq   c                 ó@   — | j         rt          d¦  «        ‚|| _        dS )z¨Set the name of the timer.

        The specified name will be assigned to the background thread and serves
        for debugging and troubleshooting purposes.
        úThe timer has already started.N)rh   ÚRuntimeErrorrg   )rm   rq   s     r   Úset_namez_PeriodicTimer.set_nameé   s)   € ð Œ<ð 	AÝÐ?Ñ@Ô@Ð@àˆŒ
ˆ
ˆ
r   c                 ó0  — | j         rt          d¦  «        ‚t          | j        | j        pd| j        fd¬¦  «        | _         t          j        | | j        | j         | j        j	        ¦  «        | _
        d| j
        _        | j                              ¦   «          dS )zStart the timer.rs   ÚPeriodicTimerT)Útargetrq   r^   ÚdaemonFN)rh   rt   r   Ú_runrg   rj   ÚweakrefÚfinalizeÚ_stop_threadr`   ri   ÚatexitÚstartrp   s    r   r   z_PeriodicTimer.startô   sš   € àŒ<ð 	AÝÐ?Ñ@Ô@Ð@åØ”9Ø”Ð.˜Ø”)�Øð	
ñ 
ô 
ˆŒõ "Ô*Ø�$Ô# T¤\°4´9Ô3Gñ
ô 
ˆŒð "'ˆŒÔàŒ×ÒÑÔÐÐÐr   c                 ó@   — | j         r|                       ¦   «          dS dS )z'Stop the timer at the next opportunity.N)ri   rp   s    r   Úcancelz_PeriodicTimer.cancel  s,   € àŒ?ð 	Ø�OŠOÑÔÐÐÐð	ð 	r   c                 ó´   — | j                              | j        ¦  «        s8 | j        | j        i | j        ¤Ž | j                              | j        ¦  «        ¯6d S d S ©N)r`   Úwaitr[   r]   r^   r_   )Úctxs    r   rz   z_PeriodicTimer._run  sg   € à”.×%Ò% c¤lÑ3Ô3ð 	2ØˆCŒL˜#œ(Ð1 c¤jÐ1Ð1Ð1ð ”.×%Ò% c¤lÑ3Ô3ð 	2ð 	2ð 	2ð 	2ð 	2r   c                 óV   — |                      ¦   «          |                      ¦   «          d S rƒ   )ÚsetÚjoin)Úthreadr`   s     r   r}   z_PeriodicTimer._stop_thread  s#   € à�ŠÑÔÐà�Š‰Œˆˆˆr   )r   N)ra   rb   rc   Ú__doc__rf   r	   rE   re   r   r{   r|   r   r   r   rn   Úpropertyrq   ru   r   r�   Ústaticmethodrz   r}   r7   r   r   rX   rX   ·   sƒ  € € € € € € ðð ðð ð ð ð ñ ô ð ð �CŒ=ÐÐÑØ�fÔÐÐÑØ˜Ô)Ô*Ð*Ð*Ñ*ð €N€N�Nðàðð ˜9Ô%ðð ð	ð
 ðð 
ðð ð ð ð& ð�h˜s”mð ð ð ñ „Xðð	˜Sð 	 Tð 	ð 	ð 	ð 	ðð ð ð ð4ð ð ð ð
 ð2ð 2ð 2ñ „\ð2ð ðð ñ „\ðð ð r   rX   )r<   rR   r!   r?   rT   r{   Údatetimer   Ú	threadingr   r   Útypingr   r   r   r	   r
   r   Ú__all__rE   r   r#   r$   r   ÚboolrM   rd   rV   rX   r7   r   r   ú<module>r’      sÂ  ðð Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >ð 'Ð
'€ð#¨ð #°°c¸3°h´ð #ð #ð #ð #ðL˜cð  h¨s¤mð ð ð ð ð.Ø�sŒmð.Ø+.ð.à
ˆ3�ˆ8„_ð.ð .ð .ð .ðb1 Cð 1¨Dð 1ð 1ð 1ð 1ðh�E˜%  u¨e |Ô!4Ð4Ô5ð ¸$ð ð ð ð ðeð eð eð eð eñ eô eð eð eð er   