Ë
      çij  ã                  ó’   — d dl mZ d dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d d	lmZmZ d d
lmZ  G d„ de«      Zy)é    )Úannotations)ÚAnyN)ÚModule)Úoverride)ÚAccelerator)ÚCheckpointIO)Ú	Precision)ÚStrategyÚ
TBroadcast)Ú_DEVICEc                  óÒ   ‡ — e Zd ZdZ	 	 	 	 d
	 	 	 	 	 	 	 dˆ fd„Zeedd„«       «       Zeedd„«       «       Zedd„«       Z	edd„«       Z
eddd„«       Zedd„«       Zeddd	„«       Zˆ xZS )ÚSingleDeviceStrategyz7Strategy that handles communication on a single device.c                óÀ   •— t         ‰| �  |||¬«       t        |t        j                  «      st        j                  |«      }|| _        d| _        d| _        d| _        y )N)ÚacceleratorÚcheckpoint_ioÚ	precisionr   é   )	ÚsuperÚ__init__Ú
isinstanceÚtorchÚdeviceÚ_root_deviceÚglobal_rankÚ
local_rankÚ
world_size)Úselfr   r   r   r   Ú	__class__s        €ú~/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning_fabric/strategies/single_device.pyr   zSingleDeviceStrategy.__init__    sT   ø€ ô 	‰Ñ [ÀÐYbÐÔcÜ˜&¤%§,¡,Ô/Ü—\‘\ &Ó)ˆFØ"ˆÔØˆÔØˆŒØˆ�ó    c                ó   — | j                   S ©N)r   ©r   s    r   Úroot_devicez SingleDeviceStrategy.root_device/   s   € ð × Ñ Ð r    c                 ó   — y)NT© r#   s    r   Úis_global_zeroz#SingleDeviceStrategy.is_global_zero4   s   € ð r    c                ó:   — |j                  | j                  «       y r"   )Útor$   )r   Úmodules     r   Úmodule_to_devicez%SingleDeviceStrategy.module_to_device9   s   € à�	‰	�$×"Ñ"Õ#r    c                ó   — |S )aœ  Reduces a tensor from several distributed processes to one aggregated tensor. As this plugin only operates
        with a single device, the reduction is simply the identity.

        Args:
            tensor: the tensor to sync and reduce
            *args: ignored
            **kwargs: ignored

        Return:
            the unmodified input as reduction is not needed for single process operation

        r&   )r   ÚtensorÚargsÚkwargss       r   Ú
all_reducezSingleDeviceStrategy.all_reduce=   s	   € ð ˆr    c                ó   — |S )z*Perform a ``all_gather`` on all processes.r&   )r   r-   ÚgroupÚ
sync_gradss       r   Ú
all_gatherzSingleDeviceStrategy.all_gatherM   s	   € ð ˆr    c                 ó   — y r"   r&   )r   r.   r/   s      r   ÚbarrierzSingleDeviceStrategy.barrierR   s   € àr    c                ó   — |S r"   r&   )r   ÚobjÚsrcs      r   Ú	broadcastzSingleDeviceStrategy.broadcastV   s   € àˆ
r    )ÚcpuNNN)r   r   r   zAccelerator | Noner   zCheckpointIO | Noner   zPrecision | None)Úreturnztorch.device)r<   Úbool)r*   r   r<   ÚNone)r-   úAny | torch.Tensorr.   r   r/   r   r<   r?   )NF)r-   útorch.Tensorr2   z
Any | Noner3   r=   r<   r@   )r.   r   r/   r   r<   r>   )r   )r8   r   r9   Úintr<   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r$   r'   r+   r0   r4   r6   r:   Ú__classcell__)r   s   @r   r   r      sÛ   ø„ ÙAð  Ø*.Ø-1Ø&*ðàðð (ðð +ð	ð
 $õð Øò!ó ó ð!ð Øòó ó ðð ò$ó ð$ð òó ðð óó ðð òó ðð óó ôr    r   )Ú
__future__r   Útypingr   r   Útorch.nnr   Útyping_extensionsr   Úlightning_fabric.acceleratorsr   Ú)lightning_fabric.plugins.io.checkpoint_ior   Ú"lightning_fabric.plugins.precisionr	   Ú$lightning_fabric.strategies.strategyr
   r   Ú lightning_fabric.utilities.typesr   r   r&   r    r   Ú<module>rQ      s1   ðõ #å ã Ý Ý &å 5Ý BÝ 8ß EÝ 4ô;˜8õ ;r    