
      i                     ^    d dl mZmZ d dlmZmZ d dlmZ d dlm	Z	 d dl
mZ  G d de      Zy)	    )ABCabstractmethod)AnyOptional)Tensor)Self)CollectibleGroupc                      e Zd ZdZd+dZeedefd              Zeedefd              Z	ede
fd       Zeded	edefd
       Zedededefd       Zededededefd       Zedee   dedee   fd       Zed,dedee   dedee   fd       Zed,dedee   d	edefd       Zededee   dedefd       Zedee   dee   dee   fd       Zed,dedededdfd       Zed-ded	ee   dedefd       Zed.deee      ddfd       Zeedefd               Zeedefd!              Zeed"eddfd#              Z eed"ede
fd$              Z!eed%e
ddfd&              Z"eededefd'              Z#d"ede$fd(Z%d"ede$fd)Z&de$fd*Z'y)/
Collectivea  Interface for collective operations.

    Supports communications between multiple processes and multiple nodes. A collective owns a group.

    .. warning:: This is an :ref:`experimental <versioning:Experimental API>` feature which is still in development.

    returnNc                     d | _         y N)_groupselfs    /Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning/fabric/plugins/collectives/collective.py__init__zCollective.__init__   s	    26    c                      y)zRank.N r   s    r   rankzCollective.rank       r   c                      y)zWorld size.Nr   r   s    r   
world_sizezCollective.world_size   r   r   c                 v    | j                   "t        dt        |       j                   d      | j                   S )N`zC` does not own a group. HINT: try `collective.create_group().group`)r   RuntimeErrortype__name__r   s    r   groupzCollective.group    s=    ;;DJ''((kl  {{r   tensorsrcc                      y r   r   )r   r!   r"   s      r   	broadcastzCollective.broadcast(       =@r   opc                      y r   r   )r   r!   r&   s      r   
all_reducezCollective.all_reduce+   r%   r   dstc                      y r   r   )r   r!   r)   r&   s       r   reducezCollective.reduce.   s    CFr   tensor_listc                      y r   r   )r   r,   r!   s      r   
all_gatherzCollective.all_gather1   s    UXr   gather_listc                      y r   r   )r   r!   r/   r)   s       r   gatherzCollective.gather4   s    _br   scatter_listc                      y r   r   )r   r!   r2   r"   s       r   scatterzCollective.scatter7       [^r   output
input_listc                      y r   r   )r   r6   r7   r&   s       r   reduce_scatterzCollective.reduce_scatter:   r5   r   output_tensor_listinput_tensor_listc                      y r   r   )r   r:   r;   s      r   
all_to_allzCollective.all_to_all=   s    mpr   tagc                      y r   r   )r   r!   r)   r>   s       r   sendzCollective.send@   s    DGr   c                      y r   r   )r   r!   r"   r>   s       r   recvzCollective.recvC   s    WZr   
device_idsc                      y r   r   )r   rC   s     r   barrierzCollective.barrierF   s    GJr   c                      y r   r   clss    r   is_availablezCollective.is_availableI   s    #&r   c                      y r   r   rG   s    r   is_initializedzCollective.is_initializedM   s    %(r   kwargsc                      y r   r   rH   rL   s     r   
init_groupzCollective.init_groupQ   s    03r   c                      y r   r   rN   s     r   	new_groupzCollective.new_groupU   s    ;>r   r    c                      y r   r   )rH   r    s     r   destroy_groupzCollective.destroy_groupY   s    =@r   c                      y r   r   )rH   r&   s     r   _convert_to_native_opz Collective._convert_to_native_op]   s    47r   c                 J    | j                         s | j                  di | | S )Nr   )rK   rO   r   rL   s     r   setupzCollective.setupa   s$    ""$DOO%f%r   c                     | j                   "t        dt        |       j                   d       | j                  di || _         | S )zCreate a group.

        This assumes that :meth:`~lightning.fabric.plugins.collectives.Collective.init_group` has been
        called already by the user.

        r   z` already owns a group.r   )r   r   r   r   rQ   rW   s     r   create_groupzCollective.create_groupf   sH     ;;"4:#6#6"77NOPP$dnn.v.r   c                     | j                   "t        dt        |       j                   d      | j	                  | j                          d | _         | S )Nr   z"` does not own a group to destroy.)r   r   r   r   rS   r   s    r   teardownzCollective.teardownr   sJ    ;;4:#6#6"77YZ[[4;;'r   )r   N)r   )Nr   r   )(r   
__module____qualname____doc__r   propertyr   intr   r   r	   r    r   r$   strr(   r+   listr.   r1   r4   r9   r=   r@   r   rB   rE   classmethodboolrI   rK   r   rO   rQ   rS   rU   r   rX   rZ   r\   r   r   r   r   r   
   s   7 c    C    '   @@S@V@ @@@S@V@ @FVF#F3F6F FXd6lXFXtF|X XbVb$v,bSbQUV\Q]b b^f^DL^s^SY^ ^^V^f^3^SY^ ^pT&\pdSYlp_cdj_kp pG6GG#GdG GZ6ZZ3ZvZ ZJ(49"5JJ J&T&  &(t(  (3#3$3  3>>)9>  >@"2@t@  @7s7s7  7c d 

S 
T 
$ r   r   N)abcr   r   typingr   r   torchr   typing_extensionsr    lightning.fabric.utilities.typesr	   r   r   r   r   <module>rk      s"    #    " =m mr   