Ë
      çi£  ã                   ó¬   — d dl mZ d dlmZ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 d d
lmZ d dlmZ d dlmZ  G d„ dee«      Zy)é    )ÚABC)ÚAnyÚOptionalN)ÚTensor)Úoverride)ÚAccelerator)ÚClusterEnvironment)ÚCheckpointIO)Ú	Precision)ÚStrategy©Ú_all_gather_ddp_if_available)ÚReduceOpc                   óþ  ‡ — e Zd ZdZ	 	 	 	 	 ddee   deeej                        dee	   dee
   dee   f
ˆ fd„Zed	efd
„«       Zed	efd„«       Zed	efd„«       Zed	efd„«       Zeed	efd„«       «       Zed	eeej                        fd„«       Zej.                  deeej                        d	dfd„«       Zed	eeeef      fd„«       Zeddedee   ded	efd„«       Zeddeded	efd„«       Zedˆ fd„«       Zˆ xZ S )ÚParallelStrategyz:Strategy for training with multiple processes in parallel.NÚacceleratorÚparallel_devicesÚcluster_environmentÚcheckpoint_ioÚ	precisionc                 óF   •— t         ‰| �  |||¬«       || _        || _        y )N)r   r   r   )ÚsuperÚ__init__r   r   )Úselfr   r   r   r   r   Ú	__class__s         €úy/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning_fabric/strategies/parallel.pyr   zParallelStrategy.__init__!   s*   ø€ ô 	‰Ñ [ÀÐYbÐÔcØ 0ˆÔØATˆÕ ó    Úreturnc                 óR   — | j                   �| j                   j                  «       S dS ©Nr   )r   Úglobal_rank©r   s    r   r!   zParallelStrategy.global_rank-   s(   € à9=×9QÑ9QÐ9]ˆt×'Ñ'×3Ñ3Ó5ÐdÐcdÐdr   c                 óR   — | j                   �| j                   j                  «       S dS r    )r   Ú
local_rankr"   s    r   r$   zParallelStrategy.local_rank1   ó(   € à8<×8PÑ8PÐ8\ˆt×'Ñ'×2Ñ2Ó4ÐcÐbcÐcr   c                 óR   — | j                   �| j                   j                  «       S dS r    )r   Ú	node_rankr"   s    r   r'   zParallelStrategy.node_rank5   s(   € à7;×7OÑ7OÐ7[ˆt×'Ñ'×1Ñ1Ó3ÐbÐabÐbr   c                 óR   — | j                   �| j                   j                  «       S dS )Né   )r   Ú
world_sizer"   s    r   r*   zParallelStrategy.world_size9   r%   r   c                 ó    — | j                   dk(  S r    )r!   r"   s    r   Úis_global_zerozParallelStrategy.is_global_zero=   s   € ð ×Ñ 1Ñ$Ð$r   c                 ó   — | j                   S ©N©Ú_parallel_devicesr"   s    r   r   z!ParallelStrategy.parallel_devicesB   s   € à×%Ñ%Ð%r   c                 ó   — || _         y r.   r/   )r   r   s     r   r   z!ParallelStrategy.parallel_devicesF   s
   € à!1ˆÕr   c                 ó4   — | j                   | j                  dœS )z¥Arguments for the ``DistributedSampler``.

        If this method is not defined, or it returns ``None``, then the ``DistributedSampler`` will not be used.

        )Únum_replicasÚrank)r*   r!   r"   s    r   Údistributed_sampler_kwargsz+ParallelStrategy.distributed_sampler_kwargsJ   s   € ð !%§¡¸×9IÑ9IÑJÐJr   ÚtensorÚgroupÚ
sync_gradsc                 ó   — t        |||¬«      S )z&Perform a all_gather on all processes.)r7   r8   r   )r   r6   r7   r8   s       r   Ú
all_gatherzParallelStrategy.all_gatherS   s   € ô ,¨F¸%ÈJÔWÐWr   ÚdecisionÚallc                 óê   — t        j                  t        |«      | j                  ¬«      }| j	                  |t
        j                  ¬«      }|rt        || j                  k(  «      }|S t        |«      }|S )aè  Reduces a boolean decision over distributed processes. By default is analogous to ``all`` from the standard
        library, returning ``True`` only if all input decisions evaluate to ``True``. If ``all`` is set to ``False``,
        it behaves like ``any`` instead.

        Args:
            decision: A single input decision.
            all: Whether to logically emulate ``all`` or ``any``. Defaults to True.

        Returns:
            bool: The reduced boolean decision.

        )Údevice)Ú	reduce_op)	Útorchr6   ÚintÚroot_deviceÚ
all_reducer   ÚSUMÚboolr*   )r   r;   r<   s      r   Úreduce_boolean_decisionz(ParallelStrategy.reduce_boolean_decisionX   si   € ô —<‘<¤ H£°d×6FÑ6FÔGˆØ—?‘?ØÜ—l‘lð #ó 
ˆñ 9<”4˜ D§O¡OÑ3Ó4ˆØˆô BFÀhÃˆØˆr   c                 óp   •— | j                   €J ‚| j                   j                  «        t        ‰| �  «       S r.   )r   Úteardownr   )r   r   s    €r   rH   zParallelStrategy.teardownn   s5   ø€ à×'Ñ'Ð3Ð3Ð3Ø× Ñ ×)Ñ)Ô+Ü‰wÑÓ!Ð!r   )NNNNN)NF)T)r   N)!Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úlistr@   r>   r	   r
   r   r   ÚpropertyrA   r!   r$   r'   r*   r   rE   r,   r   ÚsetterÚdictÚstrr   r5   r   r:   rF   rH   Ú__classcell__)r   s   @r   r   r      s  ø„ ÙDð .2Ø9=Ø<@Ø04Ø)-ñ
Uà˜kÑ*ð
Uð # 4¨¯©Ñ#5Ñ6ð
Uð &Ð&8Ñ9ð	
Uð
   Ñ-ð
Uð ˜IÑ&õ
Uð ðe˜Sò eó ðeð ðd˜Cò dó ðdð ðc˜3ò có ðcð ðd˜Cò dó ðdð Øð% ò %ó ó ð%ð ð& (¨4°·±Ñ+=Ñ">ò &ó ð&ð ×Ñð2°¸$¸u¿|¹|Ñ:LÑ1Mð 2ÐRVò 2ó ð2ð ðK¨H°T¸#¸s¸(±^Ñ,Dò Kó ðKð ñX ð X°¸±ð XÐRVð XÐciò Xó ðXð ñ°ð ¸4ð È4ò ó ðð* ô"ó ô"r   r   )Úabcr   Útypingr   r   r@   r   Útyping_extensionsr   Ú)lightning_fabric.accelerators.acceleratorr   Ú9lightning_fabric.plugins.environments.cluster_environmentr	   Ú)lightning_fabric.plugins.io.checkpoint_ior
   Ú"lightning_fabric.plugins.precisionr   Ú$lightning_fabric.strategies.strategyr   Ú&lightning_fabric.utilities.distributedr   Ú lightning_fabric.utilities.typesr   r   © r   r   Ú<module>r^      s;   ðõ ß  ã Ý Ý &å AÝ XÝ BÝ 8Ý 9Ý OÝ 5ôT"�x õ T"r   