U
    ©Ê¹j´  ã                   @   s^   d dl Z d dlZd dlmZ d dlmZmZ eedœdd„Zejdœdd	„Z	G d
d„ dƒZ
dS )é    N)ÚTemplate)ÚListÚAny)Úenv_nameÚreturnc                 C   s.   t j | d¡}|dk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   úb/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/distributed/elastic/utils/api.pyÚget_env_variable_or_raise   s
    r   )r   c                  C   s’   t jdd t jt jd�} | D ]j}|\}}}}}t   |||¡}z| d¡ | d¡ |W   S  tk
r‚ } z| ¡  W 5 d }~X Y qX qtdƒ‚d S )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Úer   r   r   Úget_socket_with_port   s        ÿ


r$   c                   @   s2   e Zd ZdZdZeee eee dœ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 ]4}t |tƒr2t|ƒ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'   Ústaticmethodr   r   r)   r.   r   r   r   r   r%   .   s   r%   )r   r   Ústringr   Útypingr   r   r)   r   r$   r%   r   r   r   r   Ú<module>	   s   