Ë
      çi#  ã                   óZ   — d dl Z d dlZd dlmZ d dlmZ d dlmZ  G d„ de«      Zde	fd„Z
y)	é    N)Úoverride)ÚClusterEnvironment)Úrank_zero_onlyc                   óB  ‡ — e Zd ZdZdˆ fd„Zeedefd„«       «       Zeede	fd„«       «       Z
eedefd„«       «       Zeedefd„«       «       Zedefd	„«       Zed
eddfd„«       Zedefd„«       Zededdfd„«       Zedefd„«       Zedefd„«       Zedd„«       Zˆ xZS )ÚLightningEnvironmentaX  The default environment used by Lightning for a single node or free cluster (not managed).

    There are two modes the Lightning environment can operate with:

    1.  The user only launches the main process by :code:`python train.py ...` with no additional environment variables
        set. Lightning will spawn new worker processes for distributed training in the current node.
    2.  The user launches all processes manually or with utilities like :code:`torch.distributed.launch`.
        The appropriate environment variables need to be set, and at minimum :code:`LOCAL_RANK`.

    If the main address and port are not provided, the default environment will choose them
    automatically. It is recommended to use this default environment for single-node distributed
    training as it provides a convenient way to launch the training script.

    ÚreturnNc                 óL   •— t         ‰| �  «        d| _        d| _        d| _        y )Néÿÿÿÿr   é   )ÚsuperÚ__init__Ú
_main_portÚ_global_rankÚ_world_size)ÚselfÚ	__class__s    €ú„/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning_fabric/plugins/environments/lightning.pyr   zLightningEnvironment.__init__(   s%   ø€ Ü‰ÑÔØ!ˆŒØ!"ˆÔØ !ˆÕó    c                 ó&   — dt         j                  v S )a  Returns whether the cluster creates the processes or not.

        If at least :code:`LOCAL_RANK` is available as environment variable, Lightning assumes the user acts as the
        process launcher/job scheduler and Lightning will not launch new processes.

        Ú
LOCAL_RANK©ÚosÚenviron©r   s    r   Úcreates_processes_externallyz1LightningEnvironment.creates_processes_externally.   s   € ð œrŸz™zÐ)Ð)r   c                 óB   — t         j                  j                  dd«      S )NÚMASTER_ADDRz	127.0.0.1)r   r   Úgetr   s    r   Úmain_addressz!LightningEnvironment.main_address9   s   € ô �z‰z�~‰~˜m¨[Ó9Ð9r   c                 ó²   — | j                   dk(  r=dt        j                  v rt        t        j                  d   «      n	t	        «       | _         | j                   S )Nr
   ÚMASTER_PORT)r   r   r   ÚintÚfind_free_network_portr   s    r   Ú	main_portzLightningEnvironment.main_port>   sE   € ð �?‰?˜bÒ à2?Ä2Ç:Á:Ñ2M””B—J‘J˜}Ñ-Ô.ÔSiÓSkð ŒOð �‰Ðr   c                   ó   — y)NT© r&   r   r   ÚdetectzLightningEnvironment.detectG   s   € ð r   c                 ó   — | j                   S ©N©r   r   s    r   Ú
world_sizezLightningEnvironment.world_sizeL   s   € à×ÑÐr   Úsizec                 ó   — || _         y r)   r*   )r   r,   s     r   Úset_world_sizez#LightningEnvironment.set_world_sizeP   s
   € àˆÕr   c                 ó   — | j                   S r)   )r   r   s    r   Úglobal_rankz LightningEnvironment.global_rankT   s   € à× Ñ Ð r   Úrankc                 ó(   — || _         |t        _        y r)   )r   r   r1   )r   r1   s     r   Úset_global_rankz$LightningEnvironment.set_global_rankX   s   € à ˆÔØ"ŒÕr   c                 óT   — t        t        j                  j                  dd«      «      S )Nr   r   )r"   r   r   r   r   s    r   Ú
local_rankzLightningEnvironment.local_rank]   s   € ä”2—:‘:—>‘> ,°Ó2Ó3Ð3r   c                 ó”   — t         j                  j                  dd«      }t        t         j                  j                  d|«      «      S )NÚ
GROUP_RANKr   Ú	NODE_RANK)r   r   r   r"   )r   Ú
group_ranks     r   Ú	node_rankzLightningEnvironment.node_ranka   s0   € ä—Z‘Z—^‘^ L°!Ó4ˆ
Ü”2—:‘:—>‘> +¨zÓ:Ó;Ð;r   c                 óL   — dt         j                  v rt         j                  d= y y )NÚ
WORLD_SIZEr   r   s    r   ÚteardownzLightningEnvironment.teardownf   s   € àœ2Ÿ:™:Ñ%Ü—
‘
˜<Ñ(ð &r   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   Úboolr   Ústrr   r"   r$   Ústaticmethodr'   r+   r.   r0   r3   r5   r:   r=   Ú__classcell__)r   s   @r   r   r      s]  ø„ ñõ"ð Øð*¨dò *ó ó ð*ð Øð:˜cò :ó ó ð:ð Øð˜3ò ó ó ðð Øð�Dò ó ó ðð ð ˜Cò  ó ð ð ð  3ð  ¨4ò  ó ð ð ð!˜Sò !ó ð!ð ð# Cð #¨Dò #ó ð#ð ð4˜Cò 4ó ð4ð ð<˜3ò <ó ð<ð ò)ó ô)r   r   r   c                  ó2  — dt         j                  v rt         j                  d   } t        | «      S t        j                  t        j                  t        j
                  «      }|j                  d«       |j                  «       d   }|j                  «        |S )a  Finds a free port on localhost.

    If the environment variable `STANDALONE_PORT` is set, its value is used as the port number.

    It is useful in single-node training when we don't want to connect to a real main node but have to set the
    `MASTER_PORT` environment variable.

    ÚSTANDALONE_PORT)Ú r   r   )	r   r   r"   ÚsocketÚAF_INETÚSOCK_STREAMÚbindÚgetsocknameÚclose)Ú_portÚsÚports      r   r#   r#   l   sl   € ð œBŸJ™JÑ&Ü—
‘
Ð,Ñ-ˆÜ�5‹zÐÜ�‰”f—n‘n¤f×&8Ñ&8Ó9€AØ‡F�Fˆ7„OØ�=‰=‹?˜1Ñ€DØ‡G�G„IØ€Kr   )r   rJ   Útyping_extensionsr   Ú9lightning_fabric.plugins.environments.cluster_environmentr   Ú$lightning_fabric.utilities.rank_zeror   r   r"   r#   r&   r   r   Ú<module>rV      s2   ðó 
Û å &å XÝ ?ôQ)Ð-ô Q)ðh ô r   