§
    ŠŠtjã  ã                   ó²  — U d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	Z	ddl
mZmZmZmZmZ ddlmZ i Zeed	f         ed
<   g d¢Z G d„ d	e¦  «        Zdededdfd„Zdedededede	j        dedefd„Zdedededede	j        dedefd„Z ede¦  «          ede¦  «         dededee	j        z  dedef
d„Zdefd„Zededed         fd „¦   «         Z dS )!zä
This is an experimental new API for PyTorch Distributed. This is actively in development and subject to change or deletion entirely.

This is intended as a proving ground for more flexible and object oriented distributed APIs.
é    )Ú	Generator)Úcontextmanager)Ú	timedelta)ÚProtocolN)Ú_current_process_groupÚ_set_process_groupÚProcessGroupÚReduceOpÚStore)Ú
rendezvousÚProcessGroupFactoryÚ	_BACKENDS)r	   r
   r   Úregister_backendÚ	new_groupÚcurrent_process_groupÚprocess_groupc                   ó@   — e Zd ZdZdededededej        de	de
fd	„Zd
S )r   z%Protocol for process group factories.ÚstoreÚrankÚ
world_sizeÚtimeoutÚdeviceÚkwargsÚreturnc                 ó   — d S )N© )Úselfr   r   r   r   r   r   s          úV/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/distributed/_dist2.pyÚ__call__zProcessGroupFactory.__call__'   s	   € ð �só    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úintr   Útorchr   Úobjectr	   r   r   r    r   r   r   $   st   € € € € € Ø/Ð/ðàðð ðð ð	ð
 ðð ”ðð ðð 
ðð ð ð ð ð r    ÚnameÚfuncr   c                 óR   — | t           v rt          d| › d�¦  «        ‚|t           | <   dS )z™
    Register a new process group backend.

    Args:
        name: The name of the backend.
        func: The function to create the process group.
    úBackend z already registeredN)r   Ú
ValueError)r(   r)   s     r   r   r   2   s6   € ð �yÐÐÝÐ= DÐ=Ð=Ð=Ñ>Ô>Ð>à…Iˆd�O€O€Or    r   r   r   r   r   r   c                 ól  — ddl m} t          |¦  «        dk    rt          d¦  «        ‚ || |||¦  «        }|                     ¦   «          t          | ||¦  «        }|                     t
          j        j        ¦  «         | 	                    |t
          j        j        |¦  «         | 	                    t          j        d¦  «        t
          j        j        |¦  «         t          j                             ¦   «         r8| 	                    t          j        d¦  «        t
          j        j        |¦  «         |S )Nr   )ÚProcessGroupGlooz'Gloo backend received unexpected kwargsÚcpuÚcuda)Útorch.distributedr.   ÚlenÚAssertionErrorÚ_set_sequence_number_for_groupr	   Ú_set_default_backendÚBackendTypeÚGLOOÚ_register_backendr&   r   r0   Úis_available)	r   r   r   r   r   r   r.   Úbackend_classÚpgs	            r   Ú_gloo_factoryr<   @   s&  € ð 3Ð2Ð2Ð2Ð2Ð2å
ˆ6�{„{�aÒÐÝÐFÑGÔGÐGà$Ð$ U¨D°*¸gÑFÔF€MØ×0Ò0Ñ2Ô2Ð2å	�e˜T :Ñ	.Ô	.€BØ×Ò�LÔ4Ô9Ñ:Ô:Ð:ð ×Ò˜¥Ô!9Ô!>ÀÑNÔNÐNØ×ÒÝŒ�UÑÔ�\Ô5Ô:¸Mñô ð õ „z×ÒÑ Ô ð 
Ø
×ÒÝŒL˜Ñ Ô ¥,Ô":Ô"?Àñ	
ô 	
ð 	
ð €Ir    c                 ó  — ddl m} |                     ¦   «         }||_        |                     ¦   «         D ]8\  }}	t          ||¦  «        st          d|› �¦  «        ‚t          |||	¦  «         Œ9 || |||¦  «        }
|
                     ¦   «          |
 	                    |¦  «         t          | ||¦  «        }|                     t          j        j        ¦  «         |                     |t          j        j        |
¦  «         |S )Nr   )ÚProcessGroupNCCLzUnknown option )r1   r>   ÚOptionsÚ_timeoutÚitemsÚhasattrÚKeyErrorÚsetattrr4   Úeager_connect_single_devicer	   r5   r6   ÚNCCLr8   )r   r   r   r   r   r   r>   ÚoptsÚkÚvr:   r;   s               r   Ú_nccl_factoryrJ   _   s  € ð 3Ð2Ð2Ð2Ð2Ð2à×#Ò#Ñ%Ô%€DØ€D„MØ—’‘”ð ð ‰ˆˆ1Ý�t˜QÑÔð 	2ÝÐ0¨QÐ0Ð0Ñ1Ô1Ð1Ý��a˜ÑÔÐÐà$Ð$ U¨D°*¸dÑCÔC€MØ×0Ò0Ñ2Ô2Ð2Ø×-Ò-¨fÑ5Ô5Ð5å	�e˜T :Ñ	.Ô	.€BØ×Ò�LÔ4Ô9Ñ:Ô:Ð:Ø×Ò˜¥Ô!9Ô!>ÀÑNÔNÐNà€Ir    ÚglooÚncclÚbackendc                 ó  — | t           vrt          d| › d�¦  «        ‚t          j        |¦  «        }t	          t          t          d¦  «        ¦  «        ¦  «        \  }}}|                     |¦  «         t          |          |||||fi |¤ŽS )aF  
    Create a new process group with the given backend and options. This group is
    independent and will not be globally registered and thus not usable via the
    standard torch.distributed.* APIs.

    Args:
        backend: The backend to use for the process group.
        timeout: The timeout for collective operations.
        device: The device to use for the process group.
        **kwargs: All remaining arguments are passed to the backend constructor.
                  See the backend specific documentation for details.

    Returns:
        A new process group.
    r+   z not registeredzenv://)r   r,   r&   r   ÚnextÚiterr   Úset_timeout)rM   r   r   r   r   r   r   s          r   r   r      s“   € ð* •iÐÐÝÐ< GÐ<Ð<Ð<Ñ=Ô=Ð=åŒ\˜&Ñ!Ô!€Få"¥4­
°8Ñ(<Ô(<Ñ#=Ô#=Ñ>Ô>Ñ€Eˆ4�Ø	×Ò�gÑÔÐå�WÔ˜e T¨:°wÀÐQÐQÈ&ÐQÐQÐQr    c                  ó   — t          ¦   «         S )zn
    Get the current process group. Thread local method.

    Returns:
        The current process group.
    )r   r   r    r   r   r   Ÿ   s   € õ "Ñ#Ô#Ð#r    r;   )NNNc              #   ó”   K  — t          ¦   «         }t          | ¦  «         	 dV — t          |¦  «         dS # t          |¦  «         w xY w)zs
    Context manager for process groups. Thread local method.

    Args:
        pg: The process group to use.
    N)r   r   )r;   Úprev_pgs     r   r   r   ©   sX   è è € õ $Ñ%Ô%€Gå�rÑÔÐð$Øˆˆˆå˜7Ñ#Ô#Ð#Ð#Ð#øÕ˜7Ñ#Ô#Ð#Ð#øøøs	   ¡6 ¶A)!r$   Úcollections.abcr   Ú
contextlibr   Údatetimer   Útypingr   r&   Útorch._C._distributed_c10dr   r   r	   r
   r   Útorch.distributed.rendezvousr   r   ÚdictÚstrÚ__annotations__Ú__all__r   r   r%   r   r'   r<   rJ   r   r   r   r   r    r   ú<module>r_      sÇ  ððð ð ð &Ð %Ð %Ð %Ð %Ð %Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3ð /1€	ˆ4�Ð*Ð*Ô+Ð 0Ð 0Ñ 0ðð ð €ðð ð ð ð ˜(ñ ô ð ð˜3ð Ð&9ð ¸dð ð ð ð ðØðà
ðð ðð ð	ð
 ŒLðð ðð ðð ð ð ð>Øðà
ðð ðð ð	ð
 ŒLðð ðð ðð ð ð ð8 Ð �˜Ñ 'Ô 'Ð 'Ø Ð �˜Ñ 'Ô 'Ð 'ðRØðRàðRð �%”,ÑðRð ð	Rð
 ðRð Rð Rð Rð@$˜|ð $ð $ð $ð $ð ð$�lð $ yÐ1AÔ'Bð $ð $ð $ñ „ð$ð $ð $r    