o
    oi                     @   s\   d dl mZmZ d dlmZ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List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   m/home/ubuntu/SoloSpeech/.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#   r1   r   r   r   send@   r    zCollective.sendc                 C   r   r   r   )r   r   r   r1   r   r   r   recvC   r    zCollective.recv
device_idsc                 C   r   r   r   )r   r4   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   r6   r   r   r   is_initializedM   r9   zCollective.is_initializedkwargsc                 K   r   r   r   r7   r;   r   r   r   
init_groupQ   r9   zCollective.init_groupc                 K   r   r   r   r<   r   r   r   	new_groupU   r9   zCollective.new_groupr   c                 C   r   r   r   )r7   r   r   r   r   destroy_groupY   r9   zCollective.destroy_groupc                 C   r   r   r   )r7   r!   r   r   r   _convert_to_native_op]   r9   z Collective._convert_to_native_opc                 K   s   |   s| jdi | | S )Nr   )r:   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>   rA   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$   r   r&   r(   r*   r-   r0   r2   r   r3   r5   classmethodboolr8   r:   r   r=   r>   r?   r@   r   rB   rC   rD   r   r   r   r   r
   
   sl    
 &" $"r
   N)abcr   r   typingr   r   r   torchr   typing_extensionsr    lightning_fabric.utilities.typesr	   r
   r   r   r   r   <module>   s    