
    Vh                         d dl mZ d dlmZ d dlmZmZ d dlmZ	 d dl
mc mZ  G d de	j                        Zd Ze	j                   j#                  de       d	 Zedd
       ZddZy)    )contextmanager)	timedelta)partialwrapsNc                   $     e Zd Z fdZd Z xZS )MockProcessGroupc                 &    t         |   ||       y N)super__init__)selfrankworld	__class__s      e/home/dcms/DCMS/lib/python3.12/site-packages/torch/testing/_internal/distributed/distributed_utils.pyr   zMockProcessGroup.__init__   s    u%    c                      y)Nmock_process_group )r   s    r   getBackendNamezMockProcessGroup.getBackendName   s    #r   )__name__
__module____qualname__r   r   __classcell__)r   s   @r   r   r      s    &$r   r   c                     t        ||      S r
   )r   )prefix_storer   
world_sizetimeouts       r   create_mock_pgr      s    D*--r   r   c           
          t        j                         rJ t        j                         }|j                  t        j
                   d|dz
         t        j                  d| ||dt        d             y )Nz:0   r   fake)seconds)backendr   r   store
group_namer   )distis_initialized	HashStoreaddc10dSTORE_BASED_BARRIER_PREFIXinit_process_groupr   )r   r   r%   s      r   mock_init_distr.      si     ""$$$NNE 
II0014j1nE$!$&r   c              #      K   t        | |       	 d t        j                          y# t        j                          w xY ww)zJ
    Context manager that initializer c10d with a fake process group.
    r   r   N)r.   r'   destroy_process_groupr0   s     r   	with_distr2   +   s2     
 4%""$""$s   A* AA  Ac                 ^      t        t              S t                fd       }|S )z
    Function wrapper that inits a fake process group designed for testing.
    Right now only querying for world size is available
    r0   c                 `    t              5   | g|i | d d d        y # 1 sw Y   y xY wr
   )r2   )r   argskwargsfuncr   r   s      r   wrapperz with_fake_comms.<locals>.wrapper>   s4    tZ( 	('''	( 	( 	(s   $-)r   with_fake_commsr   )r7   r   r   r8   s   ``` r   r9   r9   6   s6    
 |TjII
4[( ( Nr   )r      )Nr   r:   )
contextlibr   datetimer   	functoolsr   r   torch.distributeddistributedr'   "torch.distributed.distributed_c10ddistributed_c10dr+   ProcessGroupr   r   Backendregister_backendr.   r2   r9   r   r   r   <module>rE      si    & 
 ! 1 1$t(( $.   2N C&" % %r   