o
    Zh                     @   s\   d dl Z d dlZd dlmZ d dlmZ dedefddZdejfdd	ZG d
d dZ	dS )    N)Template)Anyenv_namereturnc                 C   s.   t j| d}|du r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msg r   R/var/www/auris/lib/python3.10/site-packages/torch/distributed/elastic/utils/api.pyget_env_variable_or_raise   s
   r   c               	   C   s|   t jdd t jt jd} | D ],}|\}}}}}t  |||}z|d |d |W   S  ty9   |  Y qw td)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_sr   r   r   get_socket_with_port   s   


r"   c                   @   s6   e Zd ZdZdZedee dedee fddZ	dS )	macroszS
    Defines simple macros for caffe2.distributed.launch cmd args substitution
    z${local_rank}args
local_rankr   c                 C   sB   g }| D ]}t |trt|j|d}|| q|| q|S )N)r%   )
isinstancestrr   safe_substituteappend)r$   r%   Zargs_subargsubr   r   r   
substitute5   s   
zmacros.substituteN)
__name__
__module____qualname____doc__r%   staticmethodlistr   r'   r,   r   r   r   r   r#   .   s
    $r#   )
r   r   stringr   typingr   r'   r   r"   r#   r   r   r   r   <module>   s   