ó
    Eñij?  ã                   óÄ  • S SK r S SKrS SKJr  S SKrS SKJr  SSKJ	r	J
r  SSKJrJr  / SQr\ R                   " SSS	/5      rS
 rSr\R(                  " S0 S9q\[*        l        [*        R.                  (       a  \[*        l        S rS r\R4                  \R6                  4S jrS rS r\R>                  SS4S jr S r!S r" SS jr#S r$S r%S r&S r'S r(\" S\ \(5        g)é    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                 ó    • SU R                   -   $ )NzBackendType.)Úname)Úselfs    Úc/home/mande/repo/quber/.venv/lib/python3.13/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                 ó(   • U [         R                  ;   $ )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__)Úbackend_names    r   r	   r	   3   s   € ð œ;×2Ñ2Ñ2Ð2r   c                 ól  • [        U 5      (       a  [        SU  S35      e[         Vs0 s H  o3R                  UR                  _M     nn[        U [        UUS9040 UD6n[        R                  " SUS9q[        [        l
        [        R                  (       a  [        [        l        [        U    $ s  snf )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Üàœ,Ø6[Ø%9ñð	
ñð ñÐô —)’) -Ð7IÑJ€Kä-„KÔÜ××Ü/ŒÔä�|Ñ$Ð$ùò# Os   ¨ B1c                 ó<   • U R                   R                  " X40 UD6$ ©N)r   r   )ÚbackendÚrpc_timeoutÚinit_methodÚkwargss       r   r   r   f   s&   € ð �=‰=×>Ò>ØñØ$*ñð r   c                 ó:   • U R                   R                  " U0 UD6$ r)   )r   r   )r*   Úargsr-   s      r   r   r   q   s   € Ø�=‰=×-Ò-¨tÐ>°vÑ>Ð>r   c                 óH  • [         R                  n[        R                  " XX#5      nUc   S5       eUS:w  a2  XR	                  5       :w  a  [        SU SUR	                  5        35      eUS:w  a2  X$R                  5       :w  a  [        SU SUR                  5        35      eU$ )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)Ústorer6   Ú
world_sizeÚprocess_group_timeoutÚgroups        r   Ú_init_process_groupr<   u   s£   € ä)×GÑGÐô ×!Ò! %¨zÓQ€EàÑÐJÐJÓJÐà�‹
˜§¡£Ó-Ü˜^¨D¨6Ð1HÈÏÉËÈÐWÓXÐXØ�bÓ˜z¯Z©Z«\Ó9ÜØ" : ,Ð.EÀeÇjÁjÃlÀ^ÐTó
ð 	
ð €Lr   c                 ó"   • SSK Jn  U" U UUUUS9$ )Nr   )ÚTensorPipeRpcBackendOptions)r+   r,   Únum_worker_threadsÚ_transportsÚ	_channels)Ú r>   )r+   r,   r?   r@   rA   r-   r>   s          r   Ú1_tensorpipe_construct_rpc_backend_options_handlerrC   ˆ   s#   € õ .á&ØØØ-ØØñð r   c                 ó.   ^• [        U4S jU  5       5      $ )Nc              3   óº   >#   • U  HP  nUR                   S :H  =(       d5    UR                   S:H  =(       a    SUR                  s=:*  =(       a    T:  Os  v •  MR     g7f)ÚcpuÚcudar   N)ÚtypeÚindex)Ú.0ÚdÚdevice_counts     €r   Ú	<genexpr>Ú/_tensorpipe_validate_devices.<locals>.<genexpr>œ   sG   øé € ð âˆAð 	
�‰�%‰×M˜AŸF™F fÑ,×L°°a·g±g×1LÓ1LÀÔ1LÔMÚùs   ƒAA)Úall)ÚdevicesrL   s    `r   Ú_tensorpipe_validate_devicesrQ   ›   s   ø€ Üô áóó ð r   c           	      óê  • [        UR                  5       5       Vs/ s H	  nSS0 / 4PM     snn[        R                  " X`XU4U5        U VVs/ s H	  u  n    oWPM     nnnU VV	Vs0 s H	  u  py  oWU	_M     n
n	nnU VVVs0 s H  u  pupµX{_M
     nnnnU VVVs0 s H	  u  n  p]X}_M     nnnn[	        XŠXÎ5        [        XU5      n[        X2U5      nXó4$ s  snf s  snnf s  snn	nf s  snnnf s  snnnf )NrB   r   )Úranger7   r4   Ú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Ò"5˜Qˆ"ˆa��R‹Ñ"5Ñ6ð ô 	×ÒØ˜O¸ZÐHÈ%ôñ ,4Ô4ª8™-˜$  1 a’©8€IÑ4Ù>FÕGºhÑ):¨°a¸˜uš¹hÐÒGÙ:BÕCº(Ñ&6 d¨t�t’z¹(€OÒCÙ<DÕEºHÑ%8 T¨1¨a�4’=¹H€KÒEä˜)¸ÔUô 2°'ÀoÓVÐÜ$ ZÐATÓU€JØÐ*Ð*ùò 	7ùó 5ùÜGùÜCùÜEs   œCÁCÁ'C ÂC'ÂC.c                 ó¾  • U  Hb  nX5   n[        [        U5      5      [        U5      :w  a  [        SU SU 35      e[        XaU   5      (       a  MN  [        SU SU SX    35      e   U  GHî  nU(       aS  [        X'   R	                  5       5      R                  U 5      (       d$  [        SU SX'   R	                  5        SU  35      eX'   R                  5        GHy  u  p‰[        [        U	R                  5       5      5      [        U	5      :w  a  [        SU SU SU	 35      eX7   (       aI  [        U	R	                  5       5      R                  X7   5      (       d  [        SU S	U SU	 S
X7    35      eO:[        U	R	                  5       X   5      (       d  [        SU SU SU	 SX    35      eUR                  U/ 5      (       aK  [        U	R                  5       5      R                  X8   5      (       d  [        SU SU SU	 S
X8    35      eGM7  X�;   d  GM?  [        U	R                  5       X   5      (       a  GMc  [        SU SU SU	 SX    35      e   GMñ     g )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   ÚkeysÚissubsetÚitemsÚvaluesÚget)
r^   r`   rb   rc   Úis_static_groupÚnoderP   Úsource_nodeÚtarget_nodera   s
             r   rU   rU   º   sø  € ó ˆØÑ#ˆÜŒs�7‹|Ó¤ G£Ó,Ü˜u T FÐ*MÈgÈYÐWÓXÐXÜ+¨GÀtÑ5L×MÓMÜØ˜�vð Ø$˜Ið &"Ø"3Ñ"9Ð!:ð<óð ñ ô !ˆæ¤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ÑJÜ$Ø ˜}ð -1Ø1<°ð >(Ø(, vð .%Ø%0Ñ%=Ð$>ð@óð ð Kô 2Ø—	‘	“Ð.Ñ;÷ñ ô !Ø˜K˜=ð )-Ø-8¨Mð :$Ø$( 6ð *&Ø&7Ñ&DÐ%EðGóð ð �‰˜{¨B×/Ñ/Ü˜4Ÿ;™;›=Ó)×2Ñ2°;Ñ3K×LÑLÜ$Ø ˜}ð -1Ø1<°ð >(Ø(, vð .%Ø%0Ñ%=Ð$>ð@óð ò Mð Ö1Ô:VØ—‘“Ð0Ñ=÷;ô ;ô !Ø˜K˜=ð )-Ø-8¨Mð :$Ø$( 6ð *&Ø&7Ñ&DÐ%EðGóð ôG "Fò !r   c                 óv  • U (       d¦  [        5       nUR                  5        H"  nUR                  UR                  5       5        M$     UR                  5        H"  nUR                  UR                  5       5        M$     UR	                  [
        R                  " S5      5        [        U5      n [        U S S9n U $ )NrF   c                 ó   • U R                   $ r)   )rI   )rK   s    r   Ú<lambda>Ú%_create_device_list.<locals>.<lambda>  s   € °!·'²'r   )Úkey)	rh   rm   Úupdaterj   ÚdiscardÚtorchÚdeviceÚlistÚsorted)r[   rZ   rd   Údevices_setra   s        r   rW   rW   ý   sŽ   € ÞÜ),«ˆØ"×)Ñ)Ö+ˆDØ×Ñ˜tŸy™y›{Ö+ñ ,à'×.Ñ.Ö0ˆDØ×Ñ˜tŸy™y›{Ö+ñ 1à×ÑœEŸLšL¨Ó/Ô0Ü˜+Ó&ˆ
Ü˜
Ñ(9Ñ:€JØÐr   c                 ó”   • 0 nU H9  nXU   ;   d  M  X$   U    R                  5        VVs0 s H  u  pVXe_M	     snnX4'   M;     U$ s  snnf r)   )rl   )rX   r^   rb   rd   rp   ÚkÚvs          r   rV   rV   
  s]   € ØGIÐÛˆØ dÑ+Õ+à!0Ñ!6°wÑ!?×!EÑ!EÔ!Gô)Ú!G™˜�’Ñ!Gò)ÐÓ%ñ ð
 Ðùó)s   ªAc                  ó|  • SSK Jn   [        U [        R                  " 5       5      nUR                  5       n[        R                  R                  5       n[        R                  R                  5       (       a/  UR                  (       a  [        R                  R                  5         X2R                  UR                  4$ )Nr   ©ÚTensorPipeAgent)rB   r„   r   r   Ú_get_current_rpc_agentÚ_get_backend_optionsrz   rG   rL   Úis_availablerP   ÚinitÚdevice_maps)r„   ÚagentÚoptsrL   s       r   Ú_get_device_infosrŒ     sv   € Ý!ä�¤#×"<Ò"<Ó">Ó?€EØ×%Ñ%Ó'€DÜ—:‘:×*Ñ*Ó,€LÜ‡z�z×Ñ× Ñ  T§\§\Ü�
‰
�‰ÔØ×)Ñ)¨4¯<©<Ð7Ð7r   c           	      óp  • SSK Jn  [        X5      n U R                  5       nUR                  nU R                  5       n0 0 0 / 4u  pVpxU H•  n	U	R                  n
X£:w  a  [        R                  " U
[        5      u  p¼nOEU R                  5       n[        R                  R                  5       UR                  UR                  pÜnXµU
'   XÆU
'   X×U
'   UR                  U
5        M—     [!        UUUUSS9  [#        X8U5      nU H6  n
[%        Xz   Xj   U5      Xz'   [        R                  " U
[&        X'U
   US4S9  M8     g )Nr   rƒ   F)ro   T)r/   )rB   r„   r   Úget_worker_infor   Úget_worker_infosr   Úrpc_syncrŒ   r†   rz   rG   rL   r‰   rP   ÚappendrU   rV   rW   r   )rŠ   r„   Úmy_worker_inforX   Úall_worker_infosr`   rb   rc   r^   Úworker_infoÚworker_namerL   Ú
device_maprP   r‹   rd   s                   r   Ú#_set_devices_and_reverse_device_mapr—     sS  € Ý!ä�Ó(€Eð ×*Ñ*Ó,€NØ×!Ñ!€GØ×-Ñ-Ó/ÐàACÀRÈÈRÀÑ>Ð¨Û'ˆØ!×&Ñ&ˆØÓ!ä03·²ØÔ.ó1Ñ-ˆL¡gð ×-Ñ-Ó/ˆDä—
‘
×'Ñ'Ó)Ø× Ñ Ø—‘ð '.ˆLð
 *6˜+Ñ&Ø'1˜Ñ$Ø#*�KÑ Ø×Ñ˜Ö%ñ# (ô& ØØØØØòô 2°'ÀoÓVÐó !ˆä#6ØÑ$ oÑ&BÐDWó$
ˆÑ ô 	�ŠØÜ$Ø ¨kÑ":Ð<OÐQUÐVô	
ò !r   c           
      óº  • SSK JnJn  [        U [        R
                  5      (       d  [        SU  35      e[        XF5      (       d  [        SU 35      e[        R                  R                  5       n[        U5      nU(       aÜ  [        XU5      n	[        UUUR                  UR                  U	5      u  p«[        R                  R                  5       (       a%  U(       a  [        R                  R!                  5         U" U UUUUU
U5      n["        R$                  " U5        ["        R&                  " S UR(                  S9  U	R+                  5       R-                  5         U$ [/        XS5         U" U UUUU0 / 5      n["        R$                  " U5         [1        U5        UsS S S 5        $ ! [2         a    ["        R4                  " 5         e f = f! , (       d  f       g = f)Nr   )r„   r>   z`store` must be a c10d::Store. z?`rpc_backend_options` must be a `TensorPipeRpcBackendOptions`. )ÚtimeoutT)rB   r„   r>   Ú
isinstancer4   ÚStoreÚ	TypeErrorrz   rG   rL   Úboolr<   re   r‰   rP   r‡   rˆ   r   Ú_init_rpc_statesÚ_all_gatherr+   ÚbarrierÚwaitr   r—   Ú	ExceptionÚshutdown)r8   r   r6   r9   Úrpc_backend_optionsr„   r>   rL   ro   r;   rd   rP   rŠ   s                r   Ú _tensorpipe_init_backend_handlerr¥   S  s¯  € ÷ ?ä�eœTŸZ™Z×(Ñ(ÜÐ9¸%¸ÐAÓBÐBäÐ)×GÑGÜØMÐNaÐMbÐcó
ð 	
ô —:‘:×*Ñ*Ó,€Lä˜:Ó&€Oæô $ E°Ó<ˆä'UØØØ×+Ñ+Ø×'Ñ'Øó(
Ñ$Ðô �:‰:×"Ñ"×$Ñ$®ô �J‰J�O‰OÔñ  ØØØØØØØó
ˆô 	×Ò˜UÔ#ô 	�Š˜Ð&9×&EÑ&EÒFð 	�‰‹×ÑÔàˆô *¨%°tÕ<ñ $ØØØØØ#ØØóˆEô × Ò  Ô'ðô 4°EÔ:ð ÷+ =Ñ<øô$ ó Ü—’”Øðú÷% =Õ<ús$   Å,%GÆF(ÆGÆ(!G	Ç	GÇ
GÚ
TENSORPIPE)T))Úcollectionsr    Útypingr   rz   Útorch.distributedÚdistributedr4   rB   r   r   r2   Ú_utilsr   r   Ú__all__Ú
namedtupler   r   r$   r!   r   r"   r#   r	   r
   ÚDEFAULT_RPC_TIMEOUT_SECÚDEFAULT_INIT_METHODr   r   r<   ÚDEFAULT_NUM_WORKER_THREADSrC   rQ   re   rU   rW   rV   rŒ   r—   r¥   © r   r   Ú<module>r²      s  ðó Û Ý ã Ý  ç -ß Jò€ð ×%Ò%ØÐ<Ð>TÐUó€ò
&ðÐ ð �iŠi˜m°2Ñ6€à)„Ô ä××Ø+„KÔò
3ò#%ðP ×5Ñ5Ø×1Ñ1ôò?òð, %×?Ñ?ØØôò&ò+ð. QUô@òF
òò8ò1
òhUñp ØØ5Ø$õr   