Ë
    g^(h}?  ã                   óº  — d dl Z d dlZd dlmZ d dlZd dlmZ ddlm	Z	m
Z ddlmZmZ g d¢Z e j                   ddd	g«      Zd
„ ZdZ ej(                  di ¬«      aet*        _        t*        j.                  ret*        _        d„ Zd„ Zej4                  ej6                  fd„Zd„ Zd„ Zej>                  ddfd„Z d„ Z!d„ Z"	 dd„Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z( ede e(«       y)é    N)Úcasté   )ÚapiÚ	constants)Ú_group_membership_managementÚ_update_group_membership)Úbackend_registeredÚregister_backendÚconstruct_rpc_backend_optionsÚinit_backendÚBackendValueÚBackendTyper   Ú%construct_rpc_backend_options_handlerÚinit_backend_handlerc                 ó    — d| j                   z   S )NzBackendType.)Úname)Úselfs    úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/distributed/rpc/backend_registry.pyÚ_backend_type_reprr      s   € Ø˜DŸI™IÑ%Ð%ó    zï
    An enum class of available backends.

    PyTorch ships with a builtin ``BackendType.TENSORPIPE`` backend.
    Additional ones can be registered using the
    :func:`~torch.distributed.rpc.backend_registry.register_backend` function.
r   ©ÚvalueÚnamesc                 óB   — | t         j                  j                  «       v S )zø
    Checks if backend_name is registered as an RPC backend.

    Args:
        backend_name (str): string to identify the RPC backend.
    Returns:
        True if the backend has been registered with ``register_backend``, else
        False.
    )r   Ú__members__Úkeys)Úbackend_names    r   r	   r	   3   s   € ð œ;×2Ñ2×7Ñ7Ó9Ð9Ð9r   c                 ó^  — t        | «      rt        d| › d�«      ‚t        D �ci c]  }|j                  |j                  “Œ }}t        | t        ||¬«      ifi |¤Ž}t        j                  d|¬«      at        t        _
        t        j                  rt        t        _        t        |    S c c}w )aÐ  Registers a new RPC backend.

    Args:
        backend_name (str): backend string to identify the handler.
        construct_rpc_backend_options_handler (function):
            Handler that is invoked when
            rpc_backend.construct_rpc_backend_options(**dict) is called.
        init_backend_handler (function): Handler that is invoked when the
            `_init_rpc_backend()` function is called with a backend.
             This returns the agent.
    zRPC backend z: already registered)r   r   r   r   )r	   ÚRuntimeErrorr   r   r   Údictr   ÚenumÚEnumr   Ú__repr__Ú__doc__Ú_backend_type_doc)r   r   r   ÚmemberÚexisting_enum_dictÚextended_enum_dicts         r   r
   r
   @   s©   € ô ˜,Ô'Ü˜\¨,¨Ð7KÐLÓMÐMäBMÖN¸˜&Ÿ+™+ v§|¡|Ñ3ÐNÐÐNÜàœ,Ø6[Ø%9ôð	
ñð ñÐô —)‘) -Ð7IÔJ€Kä-„KÔÜ×ÒÜ/ŒÔÜ�|Ñ$Ð$ùò! Os   £B*c                 ó>   —  | j                   j                  ||fi |¤ŽS ©N)r   r   )ÚbackendÚrpc_timeoutÚinit_methodÚkwargss       r   r   r   e   s*   € ð ?ˆ7�=‰=×>Ñ>Ø�[ñØ$*ñð r   c                 ó:   —  | j                   j                  |i |¤ŽS r*   )r   r   )r+   Úargsr.   s      r   r   r   p   s   € Ø-ˆ7�=‰=×-Ñ-¨tÐ>°vÑ>Ð>r   c                 óD  — t         j                  }t        j                  | |||«      }|€J d«       ‚|dk7  r2||j	                  «       k7  rt        d|› d|j	                  «       › �«      ‚|dk7  r2||j                  «       k7  rt        d|› d|j                  «       › �«      ‚|S )Nz*Failed to initialize default ProcessGroup.éÿÿÿÿzrank argument z doesn't match pg rank zworld_size argument z doesn't match pg size )Úrpc_constantsÚDEFAULT_PROCESS_GROUP_TIMEOUTÚdistÚProcessGroupGlooÚrankr   Úsize)Ústorer7   Ú
world_sizeÚprocess_group_timeoutÚgroups        r   Ú_init_process_groupr=   t   s¬   € ä)×GÑGÐô ×!Ñ! %¨¨zÐ;PÓQ€EàÐÐJÐJÓJÐà�Š
˜ §¡£Ò-Ü˜^¨D¨6Ð1HÈÏÉËÈÐWÓXÐXØ�bÒ˜z¨U¯Z©Z«\Ò9ÜØ" : ,Ð.EÀeÇjÁjÃlÀ^ÐTó
ð 	
ð €Lr   c                 ó(   — ddl m}  || ||||¬«      S )Nr   )ÚTensorPipeRpcBackendOptions)r,   r-   Únum_worker_threadsÚ_transportsÚ	_channels)Ú r?   )r,   r-   r@   rA   rB   r.   r?   s          r   Ú1_tensorpipe_construct_rpc_backend_options_handlerrD   ‡   s#   € õ .á&ØØØ-ØØôð r   c                 ó,   ‡— t        ˆfd„| D «       «      S )Nc              3   ó–   •K  — | ]@  }|j                   d k(  xs+ |j                   dk(  xr d|j                  cxk  xr ‰k  nc –— ŒB y­w)ÚcpuÚcudar   N)ÚtypeÚindex)Ú.0ÚdÚdevice_counts     €r   ú	<genexpr>z/_tensorpipe_validate_devices.<locals>.<genexpr>›   sE   øè ø€ ò àð 	
�‰�%‰ÒM˜AŸF™F fÑ,ÒL°°a·g±gÖ1LÀÔ1LÓMñùs   ƒAA	)Úall)ÚdevicesrM   s    `r   Ú_tensorpipe_validate_devicesrQ   š   s   ø€ Üó àôó ð r   c           	      óè  — t        |j                  «       «      D �cg c]  }ddi g f‘Œ
 c}}t        j                  || |||f|«       |D ��cg c]	  \  }}}}|‘Œ }}}|D ��	�ci c]
  \  }}	}}||	“Œ }
}	}}|D ���ci c]
  \  }}}}||“Œ }}}}|D ���ci c]
  \  }}}}||“Œ }}}}t	        ||
||«       t        | ||«      }t        |||«      }||fS c c}w c c}}w c c}}	}w c c}}}w c c}}}w )NrC   r   )Úranger8   r5   Úall_gather_objectÚ_validate_device_mapsÚ_create_reverse_mappingÚ_create_device_list)Úmy_nameÚmy_device_countÚmy_device_mapsÚ
my_devicesr<   Ú_Úgatheredr   Ú	all_namesÚcountÚall_device_countsÚmap_Úall_device_mapsrP   Úall_devicesÚreverse_device_mapss                   r   Ú._tensorpipe_exchange_and_check_all_device_mapsre   £   s  € ô
 #(¨¯
©
«Ó"5Ö6˜Qˆ"ˆa��RŠÒ6ð ô 	×ÑØ�7˜O¨^¸ZÐHÈ%ôð ,4×4™-˜$  1 a’Ð4€IÑ4Ø>F×GÐGÑ):¨¨u°a¸˜˜u™ÐGÐÒGØ:B×CÐCÑ&6 d¨A¨t°Q�t˜T‘zÐC€OÒCØ<D×EÐEÑ%8 T¨1¨a°�4˜‘=ÐE€KÒEä˜)Ð%6¸ÈÔUô 2°'¸9ÀoÓVÐÜ$ Z°ÐATÓU€JØ 
Ð*Ð*ùò 	7ùó 5ùÜGùÜCùÜEs   œCÁCÁ#CÁ<C&ÂC-c                 ól  — | D ]^  }||   }t        t        |«      «      t        |«      k7  rt        d|› d|› �«      ‚t        |||   «      rŒIt        d|› d|› d||   › �«      ‚ | D �]Ë  }|rPt        ||   j	                  «       «      j                  | «      s%t        d|› d||   j	                  «       › d| › �«      ‚||   j                  «       D �]_  \  }}	t        t        |	j                  «       «      «      t        |	«      k7  rt        d|› d|› d|	› �«      ‚||   rEt        |	j	                  «       «      j                  ||   «      sQt        d|› d	|› d|	› d
||   › �«      ‚t        |	j	                  «       ||   «      st        d|› d|› d|	› d||   › �«      ‚|j                  |g «      rGt        |	j                  «       «      j                  ||   «      r�Œ	t        d|› d|› d|	› d
||   › �«      ‚||v s�Œ)t        |	j                  «       ||   «      r�ŒHt        d|› d|› d|	› d||   › �«      ‚ �ŒÎ y )NzNode z" has duplicated devices
devices = z, has devices with invalid indices
devices = z
device count = z@ has invalid target node names in its device maps
device maps = z
node names = z5 has duplicated target devices in its device map for z
device map = z5 has unexpected source devices in its device map for z
devices = z? has source devices with invalid indices in its device map for z5 has unexpected target devices in its device map for z? has target devices with invalid indices in its device map for )	ÚlenÚsetÚ
ValueErrorrQ   r   ÚissubsetÚitemsÚvaluesÚget)
r^   r`   rb   rc   Úis_static_groupÚnoderP   Úsource_nodeÚtarget_nodera   s
             r   rU   rU   ¹   s  € ð ò 	ˆØ˜dÑ#ˆÜŒs�7‹|Ó¤ G£Ò,Ü˜u T FÐ*MÈgÈYÐWÓXÐXÜ+¨GÐ5FÀtÑ5LÕMÜØ˜�vð Ø$˜Ið &"Ø"3°DÑ"9Ð!:ð<óð ð	ð !ó 2ˆá¤3 °{Ñ'C×'HÑ'HÓ'JÓ#K×#TÑ#TØô$
ô Ø˜�}ð %!Ø!0°Ñ!=×!BÑ!BÓ!DÐ Eð F Ø )˜{ð,óð ð
 "1°Ñ!=×!CÑ!CÓ!Eó (	ÑˆK˜Ü”3�t—{‘{“}Ó%Ó&¬#¨d«)Ò3Ü Ø˜K˜=ð )-Ø-8¨Mð :$Ø$( 6ð+óð ð
 ˜;Ò'Ü˜4Ÿ9™9›;Ó'×0Ñ0°¸[Ñ1IÔJÜ$Ø ˜}ð -1Ø1<°ð >(Ø(, vð .%Ø%0°Ñ%=Ð$>ð@óð ô 2Ø—	‘	“Ð.¨{Ñ;ôô !Ø˜K˜=ð )-Ø-8¨Mð :$Ø$( 6ð *&Ø&7¸Ñ&DÐ%EðGóð ð �‰˜{¨BÔ/Ü˜4Ÿ;™;›=Ó)×2Ñ2°;¸{Ñ3KÖLÜ$Ø ˜}ð -1Ø1<°ð >(Ø(, vð .%Ø%0°Ñ%=Ð$>ð@óð ð Ð 1Ó1Ô:VØ—‘“Ð0°Ñ=ö;ô !Ø˜K˜=ð )-Ø-8¨Mð :$Ø$( 6ð *&Ø&7¸Ñ&DÐ%EðGóð òG(	ñ2r   c                 óh  — | s¡t        «       }|j                  «       D ]!  }|j                  |j                  «       «       Œ# |j                  «       D ]!  }|j                  |j                  «       «       Œ# |j	                  t        j                  d«      «       t        |«      } t        | d„ ¬«      } | S )NrG   c                 ó   — | j                   S r*   )rJ   )rL   s    r   ú<lambda>z%_create_device_list.<locals>.<lambda>  s
   € °!·'±'€ r   )Úkey)	rh   rl   Úupdater   ÚdiscardÚtorchÚdeviceÚlistÚsorted)r[   rZ   rd   Údevices_setra   s        r   rW   rW   ü   s˜   € ÙÜ),«ˆØ"×)Ñ)Ó+ò 	,ˆDØ×Ñ˜tŸy™y›{Õ+ð	,à'×.Ñ.Ó0ò 	,ˆDØ×Ñ˜tŸy™y›{Õ+ð	,à×ÑœEŸL™L¨Ó/Ô0Ü˜+Ó&ˆ
Ü˜
Ñ(9Ô:€JØÐr   c                 óŽ   — i }|D ]7  }| ||   v sŒ||   |    j                  «       D ��ci c]  \  }}||“Œ
 c}}||<   Œ9 |S c c}}w r*   )rk   )rX   r^   rb   rd   ro   ÚkÚvs          r   rV   rV   	  sg   € ØGIÐØò ˆØ�o dÑ+Ò+à!0°Ñ!6°wÑ!?×!EÑ!EÓ!G÷)Ù˜˜A��1‘ó)Ð Ò%ðð
 Ðùó)s   ©Ac                  óh  — ddl m}  t        | t        j                  «       «      }|j                  «       }t        j                  j                  «       }t        j                  j                  «       r*|j                  rt        j                  j                  «        ||j                  |j                  fS )Nr   ©ÚTensorPipeAgent)rC   r‚   r   r   Ú_get_current_rpc_agentÚ_get_backend_optionsrx   rH   rM   Úis_availablerP   ÚinitÚdevice_maps)r‚   ÚagentÚoptsrM   s       r   Ú_get_device_infosrŠ     su   € Ý!ä�¤#×"<Ñ"<Ó">Ó?€EØ×%Ñ%Ó'€DÜ—:‘:×*Ñ*Ó,€LÜ‡z�z×ÑÔ  T§\¢\Ü�
‰
�‰ÔØ˜×)Ñ)¨4¯<©<Ð7Ð7r   c           	      óŠ  — ddl m} t        || «      } | j                  «       }|j                  }| j                  «       }i i i g f\  }}}}|D ]˜  }	|	j                  }
|
|k7  rt        j                  |
t        «      \  }}}nF| j                  «       }t        j                  j                  «       |j                  |j                  }}}|||
<   |||
<   |||
<   |j                  |
«       Œš t!        ||||d¬«       t#        |||«      }|D ];  }
t%        ||
   ||
   |«      ||
<   t        j                  |
t&        |||
   |df¬«       Œ= y )Nr   r�   F)rn   T)r0   )rC   r‚   r   Úget_worker_infor   Úget_worker_infosr   Úrpc_syncrŠ   r„   rx   rH   rM   r‡   rP   ÚappendrU   rV   rW   r   )rˆ   r‚   Úmy_worker_inforX   Úall_worker_infosr`   rb   rc   r^   Úworker_infoÚworker_namerM   Ú
device_maprP   r‰   rd   s                   r   Ú#_set_devices_and_reverse_device_mapr•     sz  € Ý!ä� %Ó(€Eð ×*Ñ*Ó,€NØ×!Ñ!€GØ×-Ñ-Ó/ÐàACÀRÈÈRÀÑ>Ð�¨°YØ'ò &ˆØ!×&Ñ&ˆØ˜'Ò!ä03·±ØÔ.ó1Ñ-ˆL˜*¡gð ×-Ñ-Ó/ˆDä—
‘
×'Ñ'Ó)Ø× Ñ Ø—‘ð '.˜*ˆLð
 *6Ð˜+Ñ&Ø'1ˆ˜Ñ$Ø#*ˆ�KÑ Ø×Ñ˜Õ%ð#&ô& ØØØØØõô 2°'¸9ÀoÓVÐð !ò 	
ˆä#6Ø˜Ñ$ o°kÑ&BÐDWó$
ˆ�KÑ ô 	�‰ØÜ$Ø  +¨kÑ":Ð<OÐQUÐVö	
ñ	
r   c           
      óx  — ddl m}m} t        | t        j
                  «      st        d| › �«      ‚t        ||«      st        d|› �«      ‚t        j                  j                  «       }|rdnd}|rÕt        | ||«      }	t        |||j                  |j                  |	«      \  }
}t        j                  j                  «       r |rt        j                  j                  «         || |||||
|«      }t!        j"                  |«       t!        j$                  d |j&                  ¬«       |	j)                  «       j+                  «        |S t-        | |d«      5   || ||||i g «      }t!        j"                  |«       	 t/        |«       |cd d d «       S # t0        $ r t!        j2                  «        ‚ w xY w# 1 sw Y   y xY w)Nr   )r‚   r?   z`store` must be a c10d::Store. z?`rpc_backend_options` must be a `TensorPipeRpcBackendOptions`. TF)Útimeout)rC   r‚   r?   Ú
isinstancer5   ÚStoreÚ	TypeErrorrx   rH   rM   r=   re   r‡   rP   r…   r†   r   Ú_init_rpc_statesÚ_all_gatherr,   ÚbarrierÚwaitr   r•   Ú	ExceptionÚshutdown)r9   r   r7   r:   Úrpc_backend_optionsr‚   r?   rM   rn   r<   rd   rP   rˆ   s                r   Ú _tensorpipe_init_backend_handlerr¢   R  s·  € ÷ ?ä�eœTŸZ™ZÔ(ÜÐ9¸%¸ÐAÓBÐBäÐ)Ð+FÔGÜØMÐNaÐMbÐcó
ð 	
ô —:‘:×*Ñ*Ó,€Lá(‘d¨e€Oáô $ E¨4°Ó<ˆä'UØØØ×+Ñ+Ø×'Ñ'Øó(
Ñ$Ð˜Wô �:‰:×"Ñ"Ô$©ô �J‰J�O‰OÔñ  ØØØØØØØó
ˆô 	×Ñ˜UÔ#ô 	�‰˜Ð&9×&EÑ&EÕFð 	�‰‹×ÑÔàˆô *¨%°°tÓ<ñ 	ñ $ØØØØØ#ØØóˆEô × Ñ  Ô'ðô 4°EÔ:ð ÷+	ñ 	øô$ ò Ü—‘”Øðú÷%	ð 	ús$   Å$F0Å8FÆF0ÆF-Æ-F0Æ0F9Ú
TENSORPIPE)T))Úcollectionsr!   Útypingr   rx   Útorch.distributedÚdistributedr5   rC   r   r   r3   Ú_utilsr   r   Ú__all__Ú
namedtupler   r   r%   r"   r   r#   r$   r	   r
   ÚDEFAULT_RPC_TIMEOUT_SECÚDEFAULT_INIT_METHODr   r   r=   ÚDEFAULT_NUM_WORKER_THREADSrD   rQ   re   rU   rW   rV   rŠ   r•   r¢   © r   r   ú<module>r¯      s  ðó Û Ý ã Ý  ç -ß Jò€ð &ˆ{×%Ñ%ØÐ<Ð>TÐUó€ò
&ðÐ ð ˆd�i‰i˜m°2Ô6€à)„Ô ä×ÒØ+„KÔò
:ò"%ðN ×5Ñ5Ø×1Ñ1óò?òð, %×?Ñ?ØØóò&ò+ð. QUó@òF
òò8ò1
òhUñp ØØ5Ø$õr   