o
    }o™i®  ã                   @   sž   d dl Z d dlZd dlZd dlZd dlZG dd„ dƒZeƒ Ze d¡Zee_	eej
d< eej
d< e d¡jZe jdd„ ƒZd	d
„ Zdd„ Zdd„ Zdd„ ZdS )é    Nc                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú
_DummyDistc                 C   s"   d| _ d| _d| _d| _d| _d S )NFr   )Ú_initÚ_rankÚbarrier_callsÚ
init_callsÚdestroy_calls©Úself© r
   úO/home/ubuntu/.local/lib/python3.10/site-packages/tests/automodel/_dist_utils.pyÚ__init__   s
   
z_DummyDist.__init__c                 C   s   | j S ©N)r   r   r
   r
   r   Úis_initialized#   s   z_DummyDist.is_initializedc                 C   s   | j stdƒ‚| jS )Núprocess-group not initialised)r   ÚRuntimeErrorr   r   r
   r
   r   Úget_rank&   s   z_DummyDist.get_rankc                 C   s    | j stdƒ‚|  jd7  _d S )Nr   é   )r   r   r   r   r
   r
   r   Úbarrier+   s   z_DummyDist.barrierc                C   s*   |dksJ ‚d| _ || _|  jd7  _d S )NÚglooTr   )r   r   r   )r	   ÚbackendÚ
world_sizeÚrankr
   r
   r   Úinit_process_group0   s   z_DummyDist.init_process_groupc                 C   s"   | j rd| _ |  jd7  _d S d S )NFr   )r   r   r   r
   r
   r   Údestroy_process_group6   s   þz _DummyDist.destroy_process_groupN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r
   r
   r
   r   r      s    r   Útorchztorch.distributedznemo.automodel.dist_utilsc                   c   s    t  ¡  d V  t  ¡  d S r   )Ú
dummy_distr   r
   r
   r
   r   Úfresh_dummy_distO   s   €r   c              	   C   s’   dD ]	}| j |dd qtƒ 0 tƒ }|du sJ ‚W d  ƒ n1 s$w   Y  tjdks0J ‚tjdks7J ‚W d  ƒ dS 1 sBw   Y  dS )u5   No process-group, no env â†’ behaves like single-GPU.)Ú
WORLD_SIZEÚRANKÚ
LOCAL_RANKÚMASTER_ADDRÚMASTER_PORTF©ÚraisingTNr   )Údelenvr   ÚFirstRankPerNoder   r   r   )ÚmonkeypatchÚkÚfirstr
   r
   r   Útest_single_gpu[   s   ÿ"ür,   c              	   C   sÆ   |   dd¡ |   dd¡ |   dd¡ |   dd¡ | jd	d
d tƒ 7 tƒ }|d
u s-J ‚W d  ƒ n1 s7w   Y  tjdksCJ ‚tjdksJJ ‚tjdksQJ ‚W d  ƒ dS 1 s\w   Y  dS )u    
    dist not initialised, but env variables present â†’ _try_bootstrap_pg path.
    Use rank 1 so that `first` is False and the first barrier is executed.
    r    Ú2r!   Ú1r#   Ú	localhostr$   Ú29500r"   Fr%   Nr   )Úsetenvr'   r   r(   r   r   r   r   ©r)   r+   r
   r
   r   Útest_auto_bootstrapg   s   ÿ"ûr3   c              	   C   s¸   |   dd¡ |   dd¡ dt_dt_tƒ = dt_dt_tƒ }|du s&J ‚tjdks-J ‚W d  ƒ n1 s7w   Y  tjdksCJ ‚tjdksJJ ‚W d  ƒ dS 1 sUw   Y  dS )z3Process-group already created; we are local-rank 0.r!   Ú0r"   Tr   Nr   )r1   r   r   r   r   r(   r   r   r2   r
   r
   r   Útest_preinitialised_rank0z   s   þ"ör5   c              
   C   s¶   |   dd¡ |   dd¡ tƒ B dt_dt_t t¡ tƒ  tdƒ‚1 s'w   Y  W d  ƒ n1 s6w   Y  tj	dksBJ ‚tj
dksIJ ‚W d  ƒ dS 1 sTw   Y  dS )	uV   
    Exception raised inside context â†’ PG is destroyed (only when first==True).
    r!   r4   r"   Tr   ÚboomNr   )r1   r   r   r   r   ÚpytestÚraisesr   r(   r   r   )r)   r
   r
   r   Útest_exception_path   s   ÿÿ"ör9   )Ú
contextlibÚ	importlibÚsysÚtypesr7   r   r   Ú
ModuleTypeÚ	torch_modÚdistributedÚmodulesÚimport_moduler(   Úcontextmanagerr   r,   r3   r5   r9   r
   r
   r
   r   Ú<module>   s$   %



