o
    8wi                     @   sX   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 deZdS )	    )ABCabstractmethod)AnyOptional)Tensor)Self)CollectibleGroupc                   @   s  e Zd ZdZdDddZeedefddZeedefdd	Z	ede
fd
dZedededefddZedededefddZededededefddZedee dedee fddZedEdedee dedee fddZedEdedee dedefddZed ed!ee dedefd"d#Zed$ee d%ee dee fd&d'ZedEdeded(eddfd)d*ZedFdedee d(edefd+d,ZedGd-eee  ddfd.d/Zeedefd0d1Zeedefd2d3Zeed4eddfd5d6Z eed4ede
fd7d8Z!eed9e
ddfd:d;Z"eededefd<d=Z#d4ede$fd>d?Z%d4ede$fd@dAZ&de$fdBdCZ'dS )H
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                 C   s
   d | _ d S N)_groupself r   l/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/lightning_fabric/plugins/collectives/collective.py__init__   s   
zCollective.__init__c                 C      dS )zRank.Nr   r   r   r   r   rank       zCollective.rankc                 C   r   )zWorld size.Nr   r   r   r   r   
world_size   r   zCollective.world_sizec                 C   s&   | j d u r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   r   r   r   group    s
   
zCollective.grouptensorsrcc                 C      d S r   r   )r   r   r   r   r   r   	broadcast(      zCollective.broadcastopc                 C   r   r   r   )r   r   r    r   r   r   
all_reduce+   r   zCollective.all_reducedstc                 C   r   r   r   )r   r   r"   r    r   r   r   reduce.   r   zCollective.reducetensor_listc                 C   r   r   r   )r   r$   r   r   r   r   
all_gather1   r   zCollective.all_gatherr   gather_listc                 C   r   r   r   )r   r   r&   r"   r   r   r   gather4   r   zCollective.gatherscatter_listc                 C   r   r   r   )r   r   r(   r   r   r   r   scatter7   r   zCollective.scatteroutput
input_listc                 C   r   r   r   )r   r*   r+   r    r   r   r   reduce_scatter:   r   zCollective.reduce_scatteroutput_tensor_listinput_tensor_listc                 C   r   r   r   )r   r-   r.   r   r   r   
all_to_all=   r   zCollective.all_to_alltagc                 C   r   r   r   )r   r   r"   r0   r   r   r   send@   r   zCollective.sendc                 C   r   r   r   )r   r   r   r0   r   r   r   recvC   r   zCollective.recv
device_idsc                 C   r   r   r   )r   r3   r   r   r   barrierF   r   zCollective.barrierc                 C   r   r   r   clsr   r   r   is_availableI      zCollective.is_availablec                 C   r   r   r   r5   r   r   r   is_initializedM   r8   zCollective.is_initializedkwargsc                 K   r   r   r   r6   r:   r   r   r   
init_groupQ   r8   zCollective.init_groupc                 K   r   r   r   r;   r   r   r   	new_groupU   r8   zCollective.new_groupr   c                 C   r   r   r   )r6   r   r   r   r   destroy_groupY   r8   zCollective.destroy_groupc                 C   r   r   r   )r6   r    r   r   r   _convert_to_native_op]   r8   z Collective._convert_to_native_opc                 K   s   |   s| jdi | | S )Nr   )r9   r<   r   r:   r   r   r   setupa   s   zCollective.setupc                 K   s6   | j dur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.

        Nr   z` already owns a group.r   )r   r   r   r   r=   r@   r   r   r   create_groupf   s   
zCollective.create_groupc                 C   s6   | j d u rtdt| j d| | j  d | _ | S )Nr   z"` does not own a group to destroy.)r   r   r   r   r>   r   r   r   r   teardownr   s
   
zCollective.teardown)r
   N)r   )Nr   r   )(r   
__module____qualname____doc__r   propertyr   intr   r   r   r   r   r   strr!   r#   listr%   r'   r)   r,   r/   r1   r   r2   r4   classmethodboolr7   r9   r   r<   r=   r>   r?   r   rA   rB   rC   r   r   r   r   r	   
   sl    
 &" $"r	   N)abcr   r   typingr   r   torchr   typing_extensionsr    lightning_fabric.utilities.typesr   r	   r   r   r   r   <module>   s    