o
    wim                     @   sf   d dl Z d dlmZ d dlZd dlZd dlmZmZmZ G dd dZ	G dd dZ
G dd	 d	ZdS )
    N)mock)get_last_rankget_rankis_global_rank_zeroc                   @   s   e Zd ZdZejdddd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestIsGlobalRankZerozQTest the is_global_rank_zero function with various environment variable settings.Tautousec                 C       dD ]}|t jv rt j|= qdS z:Clear all relevant environment variables before each test.)RANKSLURM_PROCIDOMPI_COMM_WORLD_RANK	NODE_RANK
GROUP_RANK
LOCAL_RANKNosenvironselfvar r   V/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/tests/utils/test_get_rank.pysetup_method   
   
z!TestIsGlobalRankZero.setup_methodc                 C   s   t  du sJ dS )z@Test the default behavior when no environment variables are set.TN)r   r   r   r   r   test_default_behavior"   s   z*TestIsGlobalRankZero.test_default_behaviorc                 C      dt jd< t du sJ dS )z'Test when RANK=0 (pytorch environment).0r   TNr   r   r   r   r   r   r   test_with_pytorch_rank_0&      
z-TestIsGlobalRankZero.test_with_pytorch_rank_0c                 C   r   )z.Test when RANK is not 0 (pytorch environment).1r   FNr   r   r   r   r   test_with_pytorch_rank_nonzero+   r!   z3TestIsGlobalRankZero.test_with_pytorch_rank_nonzeroc                 C   r   )z-Test when SLURM_PROCID=0 (SLURM environment).r   r   TNr   r   r   r   r   test_with_slurm_rank_00   r!   z+TestIsGlobalRankZero.test_with_slurm_rank_0c                 C   r   )z4Test when SLURM_PROCID is not 0 (SLURM environment).r"   r   FNr   r   r   r   r   test_with_slurm_rank_nonzero5   r!   z1TestIsGlobalRankZero.test_with_slurm_rank_nonzeroc                 C   r   )z3Test when OMPI_COMM_WORLD_RANK=0 (MPI environment).r   r   TNr   r   r   r   r   test_with_mpi_rank_0:   r!   z)TestIsGlobalRankZero.test_with_mpi_rank_0c                 C   r   )z:Test when OMPI_COMM_WORLD_RANK is not 0 (MPI environment).r"   r   FNr   r   r   r   r   test_with_mpi_rank_nonzero?   r!   z/TestIsGlobalRankZero.test_with_mpi_rank_nonzeroc                 C   s&   dt jd< dt jd< t du sJ dS )z'Test when NODE_RANK=0 and LOCAL_RANK=0.r   r   r   TNr   r   r   r   r   "test_with_node_rank_0_local_rank_0D      

z7TestIsGlobalRankZero.test_with_node_rank_0_local_rank_0c                 C   &   dt jd< dt jd< t du sJ dS )z.Test when NODE_RANK=0 but LOCAL_RANK is not 0.r   r   r"   r   FNr   r   r   r   r   (test_with_node_rank_0_local_rank_nonzeroJ   r)   z=TestIsGlobalRankZero.test_with_node_rank_0_local_rank_nonzeroc                 C   r*   )zTest when NODE_RANK is not 0.r"   r   r   r   FNr   r   r   r   r   test_with_node_rank_nonzeroP   r)   z0TestIsGlobalRankZero.test_with_node_rank_nonzeroc                 C   s>   dt jd< dt jd< t du sJ dt jd< t du sJ dS )z0Test using GROUP_RANK as fallback for NODE_RANK.r   r   r   Tr"   FNr   r   r   r   r   test_with_group_rank_fallbackV   s
   


z2TestIsGlobalRankZero.test_with_group_rank_fallbackc                 C   s   dt jd< dt jd< dt jd< t du sJ dt jd< dt jd< t du s'J t jd= t du s2J dt jd< dt jd< t du sCJ t jd= t du sNJ dS )	zPTest that environment variables are checked in the expected order of precedence.r   r   r"   r   r   TFNr   r   r   r   r   test_env_var_precedence_   s   






z,TestIsGlobalRankZero.test_env_var_precedenceN)__name__
__module____qualname____doc__pytestfixturer   r   r    r#   r$   r%   r&   r'   r(   r+   r,   r-   r.   r   r   r   r   r      s     

	r   c                   @   s   e Zd ZdZejdddd Zejdddd	d
 Z	ejdddejddddd Z
ejdddejddddd ZdS )TestGetRankzTest the get_rank function.Tr   c                 C   r	   r
   r   r   r   r   r   r   {   r   zTestGetRank.setup_method torch.distributed.is_initializedFreturn_valuec                 C   s   t  dksJ dS z+Test when not in a distributed environment.r   N)r   r   mock_is_initializedr   r   r   test_not_distributed   s   z TestGetRank.test_not_distributedztorch.distributed.get_rank   c                 C   $   dt jd< t dksJ |  dS )z@Test when in a distributed environment and not global rank zero.r"   r   r=   N)r   r   r   assert_called_oncer   mock_dist_get_rankr;   r   r   r   %test_distributed_not_global_rank_zero   s   
z1TestGetRank.test_distributed_not_global_rank_zeror   c                 C   r>   )z?Test when in a distributed environment and is global rank zero.r   r   r   N)r   r   r   assert_not_calledr@   r   r   r   !test_distributed_global_rank_zero   s   
z-TestGetRank.test_distributed_global_rank_zeroN)r/   r0   r1   r2   r3   r4   r   r   patchr<   rB   rD   r   r   r   r   r5   x   s    


r5   c                   @   sJ   e Zd ZdZejddddd Zejdddejdd	dd
d ZdS )TestGetLastRankz Test the get_last_rank function.r6   Fr7   c                 C   s   t  dksJ |  dS r9   r   r?   r:   r   r   r   r<      s   z$TestGetLastRank.test_not_distributedTz torch.distributed.get_world_size   c                 C   s"   t  dksJ |  |  dS )z'Test when in a distributed environment.   NrG   )r   mock_get_world_sizer;   r   r   r   test_distributed   s   z TestGetLastRank.test_distributedN)r/   r0   r1   r2   r   rE   r<   rK   r   r   r   r   rF      s    
rF   )r   unittestr   r3   torchnemo.utils.get_rankr   r   r   r   r5   rF   r   r   r   r   <module>   s   `#