Ë
      çi  ã                   ó¦   — d dl 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  e j                  e«      Z ed«      Z G d	„ d
e«      Zy)é    N)Ú	lru_cache)ÚOptional)ÚRequirementCache)Úoverride)ÚClusterEnvironment)Úfind_free_network_portÚmpi4pyc                   ó†  — e Zd ZdZd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 ed	«      defd
„«       «       Zededdfd„«       Ze ed	«      defd„«       «       Zededdfd„«       Ze ed	«      defd„«       «       Zedefd„«       Zde	fd„Zdefd„Zdd„Zy)ÚMPIEnvironmentz³An environment for running on clusters with processes created through MPI.

    Requires the installation of the `mpi4py` package. See also: https://github.com/mpi4py/mpi4py

    ÚreturnNc                 ó¦   — t         st        t        t         «      «      ‚ddlm} |j
                  | _        d | _        d | _        d | _	        d | _
        y )Nr   ©ÚMPI)Ú_MPI4PY_AVAILABLEÚModuleNotFoundErrorÚstrr	   r   Ú
COMM_WORLDÚ_comm_worldÚ_comm_localÚ
_node_rankÚ_main_addressÚ
_main_port)Úselfr   s     ú~/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning_fabric/plugins/environments/mpi.pyÚ__init__zMPIEnvironment.__init__&   sC   € Ý Ü%¤cÔ*;Ó&<Ó=Ð=åàŸ>™>ˆÔØ/3ˆÔØ)-ˆŒØ,0ˆÔØ)-ˆ�ó    c                  ó   — y)NT© ©r   s    r   Úcreates_processes_externallyz+MPIEnvironment.creates_processes_externally2   s   € ð r   c                 ó\   — | j                   €| j                  «       | _         | j                   S ©N)r   Ú_get_main_addressr   s    r   Úmain_addresszMPIEnvironment.main_address7   s-   € ð ×ÑÐ%Ø!%×!7Ñ!7Ó!9ˆDÔØ×!Ñ!Ð!r   c                 ó\   — | j                   €| j                  «       | _         | j                   S r"   )r   Ú_get_main_portr   s    r   Ú	main_portzMPIEnvironment.main_port>   s(   € ð �?‰?Ð"Ø"×1Ñ1Ó3ˆDŒOØ�‰Ðr   c                  óv   — t         sy	 ddlm}  | j                  j                  «       dkD  S # t        $ r Y yw xY w)zbReturns ``True`` if the `mpi4py` package is installed and MPI returns a world size greater than 1.Fr   r   é   )r   r	   r   ÚImportErrorr   ÚGet_sizer   s    r   ÚdetectzMPIEnvironment.detectE   s@   € õ !Øð	å"ð �~‰~×&Ñ&Ó(¨1Ñ,Ð,øô ò 	Ùð	ús   ‰, ¬	8·8r)   c                 ó6   — | j                   j                  «       S r"   )r   r+   r   s    r   Ú
world_sizezMPIEnvironment.world_sizeT   ó   € ð ×Ñ×(Ñ(Ó*Ð*r   Úsizec                 ó.   — t         j                  d«       y )NzYMPIEnvironment.set_world_size was called, but setting world size is not allowed. Ignored.©ÚlogÚdebug)r   r0   s     r   Úset_world_sizezMPIEnvironment.set_world_sizeY   s   € ä�	‰	ÐmÕnr   c                 ó6   — | j                   j                  «       S r"   )r   ÚGet_rankr   s    r   Úglobal_rankzMPIEnvironment.global_rank]   r/   r   Úrankc                 ó.   — t         j                  d«       y )Nz[MPIEnvironment.set_global_rank was called, but setting global rank is not allowed. Ignored.r2   )r   r9   s     r   Úset_global_rankzMPIEnvironment.set_global_rankb   s   € ä�	‰	ÐoÕpr   c                 óŠ   — | j                   €| j                  «        | j                   €J ‚| j                   j                  «       S r"   )r   Ú_init_comm_localr7   r   s    r   Ú
local_rankzMPIEnvironment.local_rankf   sC   € ð ×ÑÐ#Ø×!Ñ!Ô#Ø×ÑÐ+Ð+Ð+Ø×Ñ×(Ñ(Ó*Ð*r   c                 ón   — | j                   €| j                  «        | j                   €J ‚| j                   S r"   )r   r=   r   s    r   Ú	node_rankzMPIEnvironment.node_rankn   s2   € à�?‰?Ð"Ø×!Ñ!Ô#Ø�‰Ð*Ð*Ð*Ø�‰Ðr   c                 ó`   — | j                   j                  t        j                  «       d¬«      S ©Nr   ©Úroot)r   ÚbcastÚsocketÚgethostnamer   s    r   r#   z MPIEnvironment._get_main_addressu   s'   € Ø×Ñ×%Ñ%¤f×&8Ñ&8Ó&:ÀÐ%ÓCÐCr   c                 óL   — | j                   j                  t        «       d¬«      S rB   )r   rE   r   r   s    r   r&   zMPIEnvironment._get_main_portx   s"   € Ø×Ñ×%Ñ%Ô&<Ó&>ÀQÐ%ÓGÐGr   c                 óR  — t        j                  «       }| j                  j                  |d¬«      }|�t	        t        |«      «      ng }| j                  j                  |d¬«      }|j                  |«      | _        | j                  j                  | j                  ¬«      | _
        y )Nr   rC   )Úcolor)rF   rG   r   ÚgatherÚsortedÚsetrE   Úindexr   ÚSplitr   )r   ÚhostnameÚall_hostnamesÚunique_hostss       r   r=   zMPIEnvironment._init_comm_local{   s�   € Ü×%Ñ%Ó'ˆØ×(Ñ(×/Ñ/°¸qÐ/ÓAˆà5BÐ5N”vœc -Ó0Ô1ÐTVˆØ×'Ñ'×-Ñ-¨lÀÐ-ÓCˆà&×,Ñ,¨XÓ6ˆŒØ×+Ñ+×1Ñ1¸¿¹Ð1ÓHˆÕr   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   Úboolr    r   r$   Úintr'   Ústaticmethodr,   r   r.   r5   r8   r;   r>   r@   r#   r&   r=   r   r   r   r   r      s–  „ ñó
.ð Øð¨dò ó ó ðð Øð"˜cò "ó ó ð"ð
 Øð˜3ò ó ó ðð
 Øð-�Dò -ó ó ð-ð Ùˆqƒ\ð+˜Cò +ó ó ð+ð ðo 3ð o¨4ò oó ðoð Ùˆqƒ\ð+˜Sò +ó ó ð+ð ðq Cð q¨Dò qó ðqð Ùˆqƒ\ð+˜Cò +ó ó ð+ð ð˜3ò ó ððD 3ó DðH ó HôIr   r   )ÚloggingrF   Ú	functoolsr   Útypingr   Ú lightning_utilities.core.importsr   Útyping_extensionsr   Ú9lightning_fabric.plugins.environments.cluster_environmentr   Ú/lightning_fabric.plugins.environments.lightningr   Ú	getLoggerrS   r3   r   r   r   r   r   Ú<module>rc      sM   ðó Û Ý Ý å =Ý &å XÝ Rà€g×Ñ˜Ó!€á$ XÓ.Ð ôdIÐ'õ dIr   