
    sg                     t    d dl Z d dlZd dlmZ d dlmZmZ dedefdZdej                  fdZ	 G d d	      Z
y)
    N)Template)AnyListenv_namereturnc                 l    t         j                  j                  | d      }|d|  d}t        |      |S )z
    Tries to retrieve environment variable. Raises ``ValueError``
    if no environment variable found.

    Args:
        env_name (str): Name of the env variable
    NzEnvironment variable z expected, but not set)osenvironget
ValueError)r   valuemsgs      V/var/www/html/venv/lib/python3.12/site-packages/torch/distributed/elastic/utils/api.pyget_env_variable_or_raiser      s;     JJNN8T*E}%hZ/EFoL    c                  f   t        j                  dd t         j                  t         j                        } | D ]G  }|\  }}}}}t        j                   |||      }	 |j	                  d       |j                  d       |c S  t        d      # t        $ r}|j                          Y d }~sd }~ww xY w)N	localhost)hostportfamilytype)r   r   r   zFailed to create a socket)	socketgetaddrinfo	AF_UNSPECSOCK_STREAMbindlistenOSErrorcloseRuntimeError)addrsaddrr   r   proto_ses           r   get_socket_with_portr'      s    tF,<,<6CUCUE  $(!eQMM&$.	FF#$HHQKH 2
33  	GGII	s   #B	B0B++B0c                   >    e Zd ZdZdZedee   dedee   fd       Z	y)macroszS
    Defines simple macros for caffe2.distributed.launch cmd args substitution
    z${local_rank}args
local_rankr   c                     g }| D ]P  }t        |t              r-t        |      j                  |      }|j	                  |       @|j	                  |       R |S )N)r+   )
isinstancestrr   safe_substituteappend)r*   r+   args_subargsubs        r   
substitutezmacros.substitute5   sV     	%C#s#sm33z3J$$	% r   N)
__name__
__module____qualname____doc__r+   staticmethodr   r   r.   r4    r   r   r)   r)   .   s=     !Jc  S	  r   r)   )r	   r   stringr   typingr   r   r.   r   r'   r)   r:   r   r   <module>r=      s@    
     4fmm 4  r   