§
    ŠŠtjµ   ã                   ó   — 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	 d dl
mZmZ d dlmZ dgZdedeeef         fd	„Zd
ededz  fd„Zdedz  dedeeef         fd„Zdedefd„Zdeeeef         z  ddfd„Z G d„ d¦  «        ZdS )é    N)ÚCallable)Ú	timedelta)ÚEventÚThread)ÚAnyÚ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          úh/var/www/html/CA-Chatbot/venv/lib/python3.11/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   D   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   é   r2   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_hostnamerI   u   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)rJ   s    r   Ú_delayrR   ©   sH   € õ �'�5Ñ!Ô!ð +Ý”. 'Ð*ˆà�$‚€ÝŒ
�7ÑÔÐÐÐð €r   c            
       ó
  — e Zd ZU dZ G d„ d¦  «        Zedz  ed<   edz  ed<   ej	        dz  ed<   eed<   d	e
d
ed         dededdf
d„Zededz  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   rM   r   ÚdictrA   r   r3   r   r   Ú_ContextrV   Ä   s`   € € € € € € Øˆˆ‰Ø˜9Ô%Ð%Ð%Ñ%Ø�C˜�HŒoÐÐÑØ�S˜#�X”ÐÐÑØÐÐÑÐÐr   rc   NÚ_nameÚ_threadÚ
_finalizerÚ_ctxrW   rY   rX   rZ   r[   r
   c                 ó  — d | _         |                      ¦   «         | _        |                     ¦   «         | j        _        || j        _        |pd| j        _        |pi | j        _        t          ¦   «         | j        _	        d | _
        d | _        d S )Nr3   )rd   rc   rg   Útotal_secondsrW   rY   rZ   r[   r   r\   re   rf   )ÚselfrW   rY   rZ   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.)rd   ©rj   s    r   Únamez_PeriodicTimer.nameå   s   € ð ŒzÐr   rn   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)re   ÚRuntimeErrorrd   )rj   rn   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.rp   ÚPeriodicTimerT)Útargetrn   rZ   ÚdaemonFN)re   rq   r   Ú_runrd   rg   ÚweakrefÚfinalizeÚ_stop_threadr\   rf   ÚatexitÚstartrm   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)rf   rm   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\   ÚwaitrW   rY   rZ   r[   )Úctxs    r   rw   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   rz   z_PeriodicTimer._stop_thread  s#   € à�ŠÑÔÐà�Š‰Œˆˆˆr   )r
   N)r]   r^   r_   Ú__doc__rc   rA   ra   r   rx   ry   r   r   r   rk   Úpropertyrn   rr   r|   r~   Ústaticmethodrw   rz   r3   r   r   rT   rT   ¸   s‚  € € € € € € ðð ðð ð ð ð ñ ô ð ð �‰:ÐÐÑØ�d‰]ÐÐÑØÔ  4Ñ'Ð'Ð'Ñ'ð €N€N�Nðàðð ˜9Ô%ðð ð	ð
 ðð 
ðð ð ð ð& ð�c˜D‘jð ð ð ñ „Xðð	˜Sð 	 Tð 	ð 	ð 	ð 	ðð ð ð ð4ð ð ð ð
 ð2ð 2ð 2ñ „\ð2ð ðð ñ „\ðð ð r   rT   )r8   rN   r   r;   rP   rx   Úcollections.abcr   Údatetimer   Ú	threadingr   r   Útypingr   Ú__all__rA   rb   r   r   r    rM   r   ÚboolrI   r`   rR   rT   r3   r   r   ú<module>r�      s±  ðð Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð ð 'Ð
'€ð#¨ð #°°c¸3°h´ð #ð #ð #ð #ðL˜cð  c¨D¡jð ð ð ð ð.Ø�D‰jð.Ø(+ð.à
ˆ3�ˆ8„_ð.ð .ð .ð .ðb1 Cð 1¨Dð 1ð 1ð 1ð 1ðh�E˜E %¨ ,Ô/Ñ/ð °Dð ð ð ð ðeð eð eð eð eñ eô eð eð eð er   