a
    d}                     @   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                   @   sT  e Zd ZdZddddZeeedddZeeeddd	Z	ee
dd
dZeeeedddZeeeedddZeeeeedddZeee eee dddZedCeee eee dddZedDeee eedddZeeee eedd d!Zeee ee ee d"d#d$ZedEeeee dd%d&d'ZedFeee ee ed(d)d*ZedGeee  dd+d,d-Zeeedd.d/Zeeedd0d1Zeeedd2d3d4Z eeee
d2d5d6Z!eee
dd7d8d9Z"eeeed:d;d<Z#ee$d2d=d>Z%ee$d2d?d@Z&e$ddAdBZ'dS )H
CollectivezInterface for collective operations.

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

    .. warning::
        This API is experimental and subject to change
    N)returnc                 C   s
   d | _ d S N)_groupself r   x/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/lightning_fabric/plugins/collectives/collective.py__init__   s    zCollective.__init__c                 C   s   d S r   r   r   r   r   r   rank   s    zCollective.rankc                 C   s   d S r   r   r   r   r   r   
world_size   s    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srcr   c                 C   s   d S r   r   )r   r   r   r   r   r   	broadcast(   s    zCollective.broadcast)r   opr   c                 C   s   d S r   r   )r   r   r   r   r   r   
all_reduce,   s    zCollective.all_reduce)r   dstr   r   c                 C   s   d S r   r   )r   r   r   r   r   r   r   reduce0   s    zCollective.reduce)tensor_listr   r   c                 C   s   d S r   r   )r   r!   r   r   r   r   
all_gather4   s    zCollective.all_gatherr   )r   gather_listr   r   c                 C   s   d S r   r   )r   r   r#   r   r   r   r   gather8   s    zCollective.gather)r   scatter_listr   r   c                 C   s   d S r   r   )r   r   r%   r   r   r   r   scatter<   s    zCollective.scatter)output
input_listr   r   c                 C   s   d S r   r   )r   r'   r(   r   r   r   r   reduce_scatter@   s    zCollective.reduce_scatter)output_tensor_listinput_tensor_listr   c                 C   s   d S r   r   )r   r*   r+   r   r   r   
all_to_allD   s    zCollective.all_to_all)r   r   tagr   c                 C   s   d S r   r   )r   r   r   r-   r   r   r   sendH   s    zCollective.send)r   r   r-   r   c                 C   s   d S r   r   )r   r   r   r-   r   r   r   recvL   s    zCollective.recv)
device_idsr   c                 C   s   d S r   r   )r   r0   r   r   r   barrierP   s    zCollective.barrierc                 C   s   d S r   r   clsr   r   r   is_availableT   s    zCollective.is_availablec                 C   s   d S r   r   r2   r   r   r   is_initializedY   s    zCollective.is_initialized)kwargsr   c                 K   s   d S r   r   r3   r6   r   r   r   
init_group^   s    zCollective.init_groupc                 K   s   d S r   r   r7   r   r   r   	new_groupc   s    zCollective.new_group)r   r   c                 C   s   d S r   r   )r3   r   r   r   r   destroy_grouph   s    zCollective.destroy_group)r   r   c                 C   s   d S r   r   )r3   r   r   r   r   _convert_to_native_opm   s    z Collective._convert_to_native_opc                 K   s   |   s| jf i | | S r   )r5   r8   r   r6   r   r   r   setupr   s    zCollective.setupc                 K   s6   | j dur tdt| j d| jf 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   r9   r<   r   r   r   create_groupw   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   teardown   s
    
zCollective.teardown)r   )r   )r   )Nr   )N)(r   
__module____qualname____doc__r   propertyr   intr   r   r	   r   r   r   strr   r    r   r"   r$   r&   r)   r,   r   r.   r/   r1   classmethodboolr4   r5   r   r8   r9   r:   r;   r   r=   r>   r?   r   r   r   r   r
   
   sj      r
   N)abcr   r   typingr   r   r   Ztorchr   Ztyping_extensionsr   Z lightning_fabric.utilities.typesr	   r
   r   r   r   r   <module>   s
   