U
    <ºc–  ã                   @   s’   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  mZ G dd„ de	jƒZdd„ Ze	j d	e¡ d
d„ Zeddd„ƒZddd„ZdS )é    )Úcontextmanager)Ú	timedelta)ÚpartialÚwrapsNc                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚMockProcessGroupc                    s   t t| ƒ ||¡ d S ©N)Úsuperr   Ú__init__)ÚselfÚrankZworld©Ú	__class__© úY/tmp/pip-unpacked-wheel-gikjz4vx/torch/testing/_internal/distributed/distributed_utils.pyr	      s    zMockProcessGroup.__init__c                 C   s   dS )NÚmock_process_groupr   )r
   r   r   r   ÚgetBackendName   s    zMockProcessGroup.getBackendName)Ú__name__Ú
__module__Ú__qualname__r	   r   Ú__classcell__r   r   r   r   r      s   r   c                 C   s
   t ||ƒS r   )r   )Zprefix_storer   Ú
world_sizeÚtimeoutr   r   r   Úcreate_mock_pg   s    r   r   c              	   C   sL   t  ¡ rt‚t  ¡ }| tj› d|d ¡ t jd| ||dtddd d S )Nz:0é   r   Zfake)Úseconds)Úbackendr   r   ÚstoreZ
group_namer   )	ÚdistZis_initializedÚAssertionErrorZ	HashStoreÚaddÚc10dZSTORE_BASED_BARRIER_PREFIXZinit_process_groupr   )r   r   r   r   r   r   Úmock_init_dist   s    úr!   é   c                 c   s&   t | |d z
dV  W 5 t ¡  X dS )zJ
    Context manager that initializer c10d with a fake process group.
    ©r   r   N)r!   r   Zdestroy_process_groupr#   r   r   r   Ú	with_dist)   s    
r$   c                    s2   ˆ dkrt tˆˆdS tˆ ƒ‡ ‡‡fdd„ƒ}|S )zˆ
    Function wrapper that inits a fake process group designed for testing.
    Right now only querying for world size is available
    Nr#   c              	      s*   t ˆˆƒ ˆ | f|ž|Ž W 5 Q R X d S r   )r$   )r
   ÚargsÚkwargs©Úfuncr   r   r   r   Úwrapper<   s    z with_fake_comms.<locals>.wrapper)r   Úwith_fake_commsr   )r(   r   r   r)   r   r'   r   r*   4   s
    r*   )r   r"   )Nr   r"   )Ú
contextlibr   Údatetimer   Ú	functoolsr   r   Ztorch.distributedZdistributedr   Z"torch.distributed.distributed_c10dZdistributed_c10dr    ZProcessGroupr   r   ZBackendZregister_backendr!   r$   r*   r   r   r   r   Ú<module>   s   
