+
    NV-jLN  ã                   ó€  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t
Ht ^ RIHt ^ RIHt ^RIHtHtHtHtHtHt ] ! R R4      4       t] ! R	 R
4      4       t] ! R R4      4       tR!R ltR tR"R ltR!R lt ! R R4      tR t R t!R t"R t#R t$R#R lt%R#R lt&R!R lt'R t(R t)R t*R t+R t,R  t-R# )$é    N)Údefaultdict)Ú	dataclass)ÚDEVNULLÚrun)ÚOptional)ÚHostÚHostfileÚOptionalBoolActionÚlogÚ	log_errorÚlog_warningc                   ó2   a € ] tR t^t o R tV 3R ltRtV tR# )ÚSSHInfoc                ó   € V P                   # ©N)Úcan_ssh)Úselfs   &Ún/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx/_distributed_utils/config.pyÚ__bool__ÚSSHInfo.__bool__   s   € Ø�|‰|Ðó    c                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   # )é   r   Úhas_sudo)Úbool)ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚSSHInfo.__annotate__   s   ø‡ ‚ á�Mñ ñ �Nò r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r      s   ø‡ € ò
÷ ƒ r   r   c                   ó,   a € ] tR t^"t o V 3R ltRtV tR# )ÚThunderboltPortc                óN   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[S[ ,          ;R&   # )r   ÚifaceÚuuidÚconnected_to)Ústrr   )r   r   s   "€r   r   ÚThunderboltPort.__annotate__"   s,   ø‡ ‚ á�Jñ ñ �Iñ ñ ™3•-Ñò	 r   r    N©r!   r"   r#   r$   r%   r&   r'   r(   s   @r   r*   r*   "   ó   ø‡ ‡ „ r   r*   c                   ó,   a € ] tR t^)t o V 3R ltRtV tR# )ÚThunderboltHostc                óB   <€ V ^8„  d   Qh/ S[ ;R&   S[S[,          ;R&   # )r   ÚnameÚports)r/   Úlistr*   )r   r   s   "€r   r   ÚThunderboltHost.__annotate__)   s!   ø‡ ‚ á
�Iñ ñ ‘Õ Ñ ò r   r    Nr1   r(   s   @r   r4   r4   )   r2   r   r4   c                 óÖ  € V  Fâ  p\        VR VP                  4       \        RVP                  RRR.RRR7      P                  P	                  4       pVR8w  d   VP
                  P                  V4       Ks  \        RVP                  RRR.RRR7      P                  P	                  4       pVR8w  d   VP
                  P                  V4       KÌ  \        R	VP                  4       Kä  	  R
# )zGetting the ip fromÚsshÚipconfigÚ	getifaddrÚen0T©Úcapture_outputÚtextÚ Úen1zCould not extract ip forN)r   Ússh_hostnamer   ÚstdoutÚstripÚipsÚappendr   )ÚhostsÚverboseÚhÚips   &&  r   Úadd_ipsrM   /   sÈ   € ãˆÜˆGÐ*¨A¯N©NÔ;ÜØ�A—N‘N J°¸UÐCØØô
÷ ‰&—‘“ð	 	ð
 �Œ8Ø�E‰E�L‰L˜ÔÙäØ�A—N‘N J°¸UÐCØØô
÷ ‰&—‘“ð	 	ð
 �Œ8Ø�E‰E�L‰L˜ÔÙäÐ.°·±Ö?ó) r   c                 ó|  € V P                   '       dQ   \        V P                   R 4      ;_uu_ 4       p\        P                  ! VP	                  4       V^R7       RRR4       R# \        R4       \        R4       \        \        P                  ! VP	                  4       ^R7      4       R#   + '       g   i     R# ; i)Úw)ÚindentNr	   z========)Úoutput_hostfileÚopenÚjsonÚdumpÚto_jsonÚprintÚdumps)ÚargsÚhostfileÚfs   && r   Úsave_hostfiler[   H   s~   € Ø××ÐÜ�$×&Ñ&¨×,Ô,°Ü�IŠI�h×&Ñ&Ó(¨!°AÕ6÷ -Ñ,ô 	ˆjÔÜˆjÔÜŒd�jŠj˜×)Ñ)Ó+°AÔ6Ö7÷ -×,Ð,ús   ±(B*Â*B;	c                 óB  € V'       g   \         M\        pR pV  F¤  p\        VRVP                  R4       \	        RVP                  R.RRR7      P
                  P                  4       P                  4       pV Uu. uF  qwP                  R4      '       g   K  VNK  	  ppV'       d   K�  V! VP                  R4       RpK¦  	  V'       d'   V! 4        V! R	4       V! 4        V! R
4       V! R4       V'       d   V'       d   \        P                  ! ^4       V'       * # u upi )FzChecking thatzsupports RDMAr;   Úibv_devicesTr?   Úrdma_z"does not seem to have RDMA enabledzESome of the hosts don't have RDMA enabled or they don't support RDMA.zFSee https://ml-explore.github.io/mlx/build/html/usage/distributed.htmlz'for instructions on how to enable RDMA.)r   r   r   rD   r   rE   rF   ÚsplitÚ
startswithÚsysÚexit)rI   rJ   ÚstrictÚlog_fÚfailedrK   Ú	rdma_devsÚds   &&&     r   Ú
check_rdmarh   R   sÝ   € ç%�K¬9€EØ€FÛˆÜˆG�_ a§n¡n°oÔFä�˜Ÿ™¨Ð6ÀtÐRVÔWß‰V—E‘E“Gß‰U‹Wð 	ñ
 !*ÓC¡	˜1¯\©\¸'×-B—Q�Q¡	ˆ	ÐCß‰yÙ�!—.‘.Ð"FÔGØŠFñ ÷ ÙŒÙÐUÔVÙŒÙÐVÔWÙÐ7Ô8ç—&Ü�Š�ŒàŒ:Ðùò Ds   Á9DÂDc                 ó   € \         ;QJ d    R  V 4       F  '       d   K   RM	  RM! R  V 4       4      pV'       gR   V'       dJ   \        R4       \        W4       F/  w  rEVP                  '       d   K  \        RVP                  4       K1  	  V# )c              3   ó8   "  € T F  qP                   x € K  	  R # 5ir   )r   )Ú.0Úinfos   & r   Ú	<genexpr>Ú!can_auto_setup.<locals>.<genexpr>p   s   é € Ð5©W T—=–=«Wùó   ‚FTzOAutomatic setup requested but the following hosts do not have passwordless sudoú - )Úallr   Úzipr   rD   )rI   ÚsshinfoÚ
auto_setupr   rK   Úis   &&&   r   Úcan_auto_setuprv   o   sc   € ß‹sÑ5©WÓ5�s�sŠsÑ5©WÓ5Ó5€HßŸ
ÜØ]ô	
ô ˜Ö'‰DˆAØ—:—:’:Ü˜E 1§>¡>Ö2ñ (ð €Or   c                   ó0   a € ] tR t^{t o R tRR ltRtV tR# )ÚIPConfiguratorc                ó  € \        4       p\        \        4      p^ p^ p\        V4       EF?  w  r‰\        V	P                  4       EF  w  r«VP
                  '       g   K  VP
                  V9  d   K-  WŠ3V9   d   K7  W;P
                  ,          w  rÍRV RV^,            2pRV RV^,            2pVP                  pW,,          P                  V,          P                  pWXV3,          P                  VV34       W\V3,          P                  VV34       VP                  WŠ34       VP                  WÍ34       V^,          pV^ÿ8”  d   V^,          p^ pV^ÿ8”  g   EK  \        R4      h	  EKB  	  WPn
        Wn        W n        R# )r   z192.168.Ú.zRan out of available local IPsN)Úsetr   r8   Ú	enumerater7   r.   r,   rH   ÚaddÚ
ValueErrorrG   rI   Útb_hosts)r   rI   r   Úuuid_reverse_indexÚassignedrG   Úip0Úip1Úsrc_noderK   Úsrc_portÚpÚdst_nodeÚdst_portÚip_srcÚip_dstÚ	iface_srcÚ	iface_dsts   &&&&              r   Ú__init__ÚIPConfigurator.__init__|   s`  € Ü“5ˆÜœ$ÓˆØˆØˆÜ$ X×.‰KˆHÜ(¨¯©×1‘�Ø—~—~�~ÙØ—>‘>Ð);Ô;ÙØÐ'¨8Ô3Ùà%7¿¹Õ%GÑ"�à# C 5¨¨#°­'¨Ð3�Ø# C 5¨¨#°­'¨Ð3�ØŸG™G�	Ø$Õ.×4Ñ4°XÕ>×DÑD�	à˜hÐ&Õ'×.Ñ.°	¸6Ð/BÔCØ˜hÐ&Õ'×.Ñ.°	¸6Ð/BÔCà—‘˜hÐ1Ô2Ø—‘˜hÐ1Ô2à�q•�Ø˜”9Ø˜1•H�CØ�CØ˜—9Ü$Ð%EÓFÐFô5  2ñ /ð: ŒØŒ
Ø Žr   c                ón  € R p\        \        V P                  V P                  4      4       EF„  w  pw  rVRpVR,          p\	        \        V P                  4      4       F~  pWH8X  g   WH3V P                  9  d   K  \        V P                  WH3,          V P                  W„3,          4       F-  w  w  ršw  r¼VRV	 RV
 RV R2,          pVRV RV	 R2,          pK/  	  K€  	  V'       dt   \        R	VP                   24       VP                  4       P                  RR
4      pRVP                  V.p\        V\        P                  ! V4      4       \        V4       MKRVP                   2p\        V4       \        R\        V4      ,          4       \        V4       \        R4       \        4        EK‡  	  R# )z255.255.255.252rB   zsudo ifconfig bridge0 down
zsudo ifconfig z inet z	 netmask Ú
zsudo route change z -interface zRunning auto setup for z ; r;   z
Setup for Ú=zEnter to continueN)r|   rr   rI   r   ÚrangeÚlenrG   rV   rD   rF   Úreplacer   ÚshlexÚjoinr   Úinput)r   rJ   rt   Únetmaskru   rK   ÚthÚcommandÚjr,   rL   Ú_ÚpeerÚmsgs   &&&           r   ÚsetupÚIPConfigurator.setup¢   sj  € Ø#ˆÜ#¤C¨¯
©
°D·M±MÓ$B×C‰JˆA‰w�ØˆGØÐ5Õ5ˆGÜœ3˜tŸz™z›?Ö+�Ø”6˜a˜V¨4¯8©8Ô3ÙÜ.1°$·(±(¸1¸4µ.À$Ç(Á(È1È4Å.Ö.QÑ*‘K�U¡ !Ø °¨w°f¸R¸DÀ	È'ÈÐRTÐUÕU�GØÐ!3°D°6¸ÀeÀWÈBÐOÕO’Gó /Rñ ,÷ ÜÐ/°·±Ð/?Ð@ÔAØ!Ÿ-™-›/×1Ñ1°$¸Ó>�Ø  !§.¡.°'Ð:�Ü�GœUŸZšZ¨Ó0Ô1Ü�G•à" 1§>¡>Ð"2Ð3�Ü�c”
Ü�cœC ›H•nÔ%Ü�g”ÜÐ)Ô*Ü�Gó+ Dr   )rI   rG   r   N)FF)r!   r"   r#   r$   r�   rŸ   r&   r'   r(   s   @r   rx   rx   {   s   ø‡ € ò$!÷Lò r   rx   c                 ó$  € / pR pV P                  R4      P                  R4       Fg  pVP                  R4      '       d   VP                  4       R,          pK3  VP                  R4      '       g   KL  VP                  4       R,          W&   R pKi  	  V# )Nzutf-8r�   zHardware Port::é   NNzDevice::é   NN)Údecoder_   r`   rF   )Úports_stringr7   Ú	port_nameÚls   &   r   Úparse_hardware_portsr¨   ¼   sx   € Ø€EØ€IØ× Ñ  Ó)×/Ñ/°Ö5ˆØ�<‰<Ð(×)Ò)ØŸ™›	 #�ŠIØ�\‰\˜)×$Ô$Ø Ÿw™w›y¨�}ˆEÑØŠIñ 6ð €Lr   c                 ó  € . pV  Fc  p\        VR VP                  4       VP                  \        P                  ! \        RVP                  RRR.RR7      P                  4      4       Ke  	  . pV  FW  p\        VRVP                  4       VP                  \        \        RVP                  RR	.RR7      P                  4      4       KY  	  . p\        W$4       FÞ  w  rgR
p. p	VR,           F¡  p
V
P                  R4      pVf   K  V
R,          pV
R,          R,          pV
P                  R. 4      pV Uu. uF  pRV9   g   K  VNK  	  ppV'       d   V^ ,          R,          MRpVRV 2,          pV	P                  \        VVV4      4       K£  	  VP                  \        V\        V	R R7      4      4       Kà  	  / p\        V4       F6  w  pp\        VP                  4       F  w  ppVV3VVP                  &   K  	  K8  	  VV3# u upi )zGetting connectivity fromr;   Úsystem_profilerÚSPThunderboltDataTypez-jsonT)r@   zGetting interface names fromÚnetworksetupz-listallhardwareportsrB   Údomain_uuid_keyNÚdevice_name_keyÚreceptacle_1_tagÚreceptacle_id_keyÚ_itemszThunderbolt c                 ó   € V P                   # r   )r,   ©Úxs   &r   Ú<lambda>Ú&extract_connectivity.<locals>.<lambda>þ   s   € È!Ï'Ê'r   ©Úkey)r   rD   rH   rS   Úloadsr   rE   r¨   rr   Úgetr*   r4   Úsortedr|   r7   r-   )rI   rJ   Úthunderbolt_connectionsrK   Úinterface_mapsr   ÚcÚ	iface_mapr6   r7   Útr-   ÚtagÚitemsÚitemÚconnected_itemsr.   r,   r€   ru   r›   r†   s   &&                    r   Úextract_connectivityrÅ   È   s  € à ÐÛˆÜˆGÐ0°!·.±.ÔAØ×&Ñ&Ü�JŠJÜàØŸ™Ø)Ø/Øðð $(ô	÷ ‘&óö	
ñ ð  €NÛˆÜˆGÐ3°Q·^±^ÔDØ×ÑÜ ÜàØŸ™Ø&Ø/ð	ð $(ô÷ ‘&ó
ö	
ñ ð" €HÜÐ3ÖD‰ˆØˆØˆØÐ*×+Ð+ˆAØ—5‘5Ð*Ó+ˆDØŠ|ÙØÐ&Õ'ˆDØÐ&Õ'Ð(;Õ<ˆCØ—E‘E˜( BÓ'ˆEÙ05ÓS±¨Ð9JÈdÑ9RŸt˜t±ˆOÐSç9H� Õ"Ð#4Ö5Èdð ð  ¨S¨EÐ2Õ3ˆEØ�L‰Lœ¨°°lÓCÖDñ ,ð 	�‰œ¨¬f°UÑ@QÔ.RÓSÖTñ! Eð& ÐÜ˜(Ö#‰ˆˆ1Ü˜aŸg™gÖ&‰DˆAˆqØ*+¨Q¨Ð˜qŸv™vÓ&ó 'ñ $ð Ð'Ð'Ð'ùò Ts   Ä3	HÅHc                 ó  € . p\        V 4       Fw  w  r4^ .\        V 4      ,          pVP                   F>  pVP                  V9   g   K  WP                  ,          w  rxWW;;,          ^,          uu&   K@  	  VP	                  V4       Ky  	  V# ©r   )r|   r“   r7   r.   rH   )	r   r€   Úconnectivityru   rK   r¾   r†   r›   rœ   s	   &&       r   Úmake_connectivity_matrixrÉ   	  st   € Ø€LÜ˜(Ö#‰ˆØˆC”#�h“-ÕˆØ—”ˆAØ�~‰~Ð!3Ö3Ø)¯.©.Õ9‘�Ø—˜•	•ñ ð 	×Ñ˜AÖñ $ð Ðr   c           
      óB  € . p\        \        V4      4       FL  pR pTp V\        ^aV^,          ,           4      ,          pV^,          pV^ 8X  g   K3   TP                  T4       KN  	  \	        R4       \	        R4       \        V 4       F'  w  rG\	        RW4,           RVP                   R24       K)  	  \        V4       FÒ  w  rGVP                   F½  pVP                  '       g   K  VP                  V9  d   K*  W(P                  ,          p	V	^ ,          V8  d   KL  \	        RW4,           RW9^ ,          ,           2R R7       \	        RVP                   RW^ ,          ,          P                  V	^,          ,          P                   R	24       K¿  	  KÔ  	  \	        R
4       R# )rB   z	graph G {z  node [shape=rectangle];z  z	 [label="z"];z -- )ÚendÚ/z"]Ú}N)
r’   r“   ÚchrrH   rV   r|   rD   r7   r.   r,   )
rI   r   r€   Únamesru   Únr›   rK   r†   Údsts
   &&&       r   Útb_connectivity_to_dotrÒ     sS  € à€EÜ”3�x“=Ö!ˆØˆØˆØØ”�R˜!˜b�&•[Ó!Õ!ˆAØ�"�HˆAØ�AŽvØØ�‰�QŽñ "ô 
ˆ+ÔÜ	Ð
%Ô&Ü˜%Ö ‰ˆÜ��5•8�*˜I a§n¡nÐ%5°SÐ9Ö:ñ !ä˜(Ö#‰ˆØ—”ˆAØ—>—>�>ÙØ�~‰~Ð%7Ô7ÙØ$§^¡^Õ4ˆCØ�1�v˜ŒzÙÜ�B�u•x�j  U¨q­6¥] OÐ4¸"Õ=Ü�I˜aŸg™g˜Y a¨°QµÕ(8×(>Ñ(>¸sÀ1½vÕ(F×(LÑ(LÐ'MÈRÐPÖQó ñ $ô 
ˆ#†Jr   c           
      óŠ  a aaa€ . p\        4       p\        S 4      oV VV3R  lo\        S4       F„  pS! W3. \        4       4       Fk  o\        V V3R l\        \        S4      4       4       4      p\	        \        S4      4      pWR9  g   KG  VP                  SV34       VP                  V4       Km  	  K†  	  \        VR R7      # )c              3   ó@  <"  € VP                  V4       VP                  V4       \        S4       FD  pSV,          V,          ^ 8:  d   K  W@8X  d   VR,          x € WC9  g   K3  S! WW#4       Rj  x€L
  KF  	  VP                  4        VP	                  V4       R#  L+5i)r   :NNNN)rH   r}   r’   ÚpopÚremove)Ú
start_nodeÚnodeÚpathÚvisitedr›   rÈ   ÚdfsÚ	num_nodess   &&&& €€€r   rÛ   Úextract_rings.<locals>.dfs9  s‚   øé € Ø�‰�DÔØ�‰�DÔÜ�yÖ!ˆAØ˜DÕ! !Õ$¨Ô)ÙØŒØ˜1•g’ØÖÙ˜z¨dÓ<×<Ò<ñ "ð 	�‰Œ
Ø�‰�tÖñ =ùs   ƒABÁ$BÁ0BÁ1,Bc              3   óŽ   <"  € T F:  pSSV,          ,          SV^,           \        S4      ,          ,          ,          x € K<  	  R# 5i)é   N©r“   )rk   ru   rÈ   Úrs   & €€r   rm   Ú extract_rings.<locals>.<genexpr>H  s4   øé € ÐUÁ}À!�l 1 Q¥4Õ(¨¨A°­E´S¸³VÕ+;Õ)<×=Ò=Ã}ùs   ƒAAc                 ó(   € \        V ^ ,          4      ) # rÇ   rà   r³   s   &r   rµ   Úextract_rings.<locals>.<lambda>N  s   € ¬¨A¨a­D«	¡zr   r·   )r{   r“   r’   ÚminÚtupler»   rH   r}   )	rÈ   ÚringsÚexisting_ringsÚstartÚcntÚrkeyrÛ   rÜ   rá   s	   f     @@@r   Úextract_ringsrì   4  sŸ   û€ Ø€EÜ“U€NÜ�LÓ!€I÷ô �yÖ!ˆÙ�U 2¤s£uÖ-ˆAÜÕUÄuÌSÐQRËVÄ}ÓUÓUˆCÜœ ›Ó#ˆDØÖ)Ø—‘˜a ˜XÔ&Ø×"Ñ" 4Ö(ó .ñ "ô �%Ñ1Ô2Ð2r   c           	      óp  € \        V4      p\        V4       F›  p\        V4       F‰  pWE8X  d   K  W,          V,          ^ 8:  g   K!  V'       d_   \        RW,          P                   RW,          P                   24       \        4        \        R4       \        P
                  ! ^4       K‡    R# 	  K�  	  R# )r   zIncomplete mesh, z is not connected to ú/Try passing --dot to visualize the connectivityFT)r“   r’   r   rD   ra   rb   )rI   rÈ   rc   rÜ   ru   r›   s   &&&   r   Úcheck_valid_meshrï   Q  s”   € Ü�LÓ!€IÜ�9ÖˆÜ�yÖ!ˆAØŒvÙØ�˜qÕ! QÖ&ßÜØ+¨E­H×,AÑ,AÐ+BÐBWÐX]ÕX`×XmÑXmÐWnÐoôô ”KÜÐOÔPÜ—H’H˜Q–Kã ó "ñ ñ r   c                 ó   a € \        V4      ^ 8„  ;'       d&    \        V^ ,          ^ ,          4      \        S 4      8H  pV'       dŠ   V'       g‚   \        R4       \        4        \        R4       \        V4      ^ 8”  d<   \        R4       V F*  p\        RRP                  V 3R lV 4       4       24       K,  	  \        P                  ! ^4       V# )r   zCould not find a full ring.rî   zRings found:rp   Ú,c              3   óJ   <"  € T F  pSV,          P                   x € K  	  R # 5ir   ©rD   )rk   ru   rI   s   & €r   rm   Ú#check_valid_ring.<locals>.<genexpr>m  s   øé € Ð(JÉÀ1¨¨q­×)>Ö)>Ëùs   ƒ #)r“   r   r–   ra   rb   )rI   rç   rc   Úhas_ringrá   s   f&&  r   Úcheck_valid_ringrö   d  s–   ø€ Ü�5‹z˜A‰~×@Ð@¤# e¨A¥h¨q¥kÓ"2´c¸%³jÑ"@€Hß—hÜÐ/Ô0ÜŒÜÐCÔDÜˆu‹:˜Œ>Ü�nÔ%Û�Ü˜C §¡Ô(JÉÓ(JÓ JÐKÐLÖMñ ä�Š�ŒØ€Or   c           	      ó<  a€ R .\        V 4      ,          oV3R lp\        V 4       UUu. uF(  w  r4\        P                  ! W$P                  V3R7      NK*  	  pppV F  pVP                  4        K  	  V F  pVP                  4        K  	  \        S4      '       gz   V'       gr   \        R4       \        V 4       F,  w  r4SV,          '       d   K  \        RVP                  4       K.  	  \        4        \        R4       \        P                  ! ^4       S# u uppi )Nc           
      ó  <€ \        R R 4      pVSV&   \        RRRRRV RR.\        \        R7      pVP                  ^ 8H  Vn        VP                  '       g   R# \        RRRRRV R	R
.\        \        R7      pVP                  ^ 8H  Vn        R# )Fr;   z-ozBatchMode=yeszConnectTimeout=5ÚechoÚsuccess)rE   ÚstderrNÚsudoÚls)r   r   r   Ú
returncoder   r   )Úhostnameru   rl   ÚresultÚresultss   &&  €r   Ú_checkÚ%check_ssh_connections.<locals>._checku  s®   ø€ Ü�u˜eÓ$ˆØˆ�‰
ô àØØØØ"ØØØð	ô Üô
ˆð ×(Ñ(¨AÑ-ˆŒØ�|�|ˆ|Ùô àØØØØ"ØØØð	ô Üô
ˆð ×)Ñ)¨QÑ.ˆŽr   )ÚtargetrX   z%Could not ssh to the following hosts:z  - z0Maybe they are not set-up for password-less ssh?)r“   r|   Ú	threadingÚThreadrD   ré   r–   rq   r   ra   rb   )rI   Úignore_unreachabler  ru   rK   ÚthreadsrÀ   r  s   &&     @r   Úcheck_ssh_connectionsr	  r  sâ   ø€ Øˆf”s˜5“zÕ!€Gõ&/ôT ˜eÔ$ôá$‰DˆAô 	×Ò ¯n©n¸aÐ-@×AÙ$ð ñ ó ˆØ	�‰Ž	ñ ãˆØ	�‰Žñ ô ˆw�<Š<× 2ÜÐ9Ô:Ü˜eÖ$‰DˆAØ˜1—:–:Ü˜& !§.¡.Ö1ñ %ô 	ŒÜÐDÔEÜ�Š�Œà€Nùó%s   ©.Dc                 ó$  € \        V P                  R 4       \        WP                  4       \        \	        V4       UUu. uF&  w  r#\        W#P                  VP                  . 4      NK(  	  uppRV P                  4      p\        W4       R# u uppi )zPreparing an ethernet hostfilerB   N)
r   rJ   rM   r	   r|   r   rD   rG   Úenvr[   )rX   rI   ru   rK   rY   s   &&   r   Úprepare_ethernet_hostfiler  ²  sk   € Üˆ�‰Ð6Ô8ÜˆE—<‘<Ô äÜ8AÀ%Ô8HÔIÑ8H±°Œˆa—‘ §¡¨Ö	+Ñ8HÒIÈ2ÈtÏxÉxó€Hô �$Ö!ùó 	Js   ¿,B
c                 ó,  € \        V P                  R 4       Vw  r5. p\        V4       Fz  w  rxW,          p	W7^,
          ,          p
TP                  \	        YyP
                  \        V4       Uu. uF$  q²P                  WŠ3,          V,          ^,          NK&  	  up. 4      4       K|  	  \        VRV P                  4      p\        WV P                  4      pTP                  V P                  V P                  ;'       d    TR7       \        W4       R# u upi )zPrepare a ring hostfileÚring©rJ   rt   N)r   rJ   r|   rH   r   rD   r’   rG   r	   r  rv   rt   rŸ   r[   )rX   rI   rG   r  rs   ÚcountÚ
ring_hostsru   rØ   rK   r�   r¾   rY   r   s   &&&&&         r   Úconfigure_ringr  ½  sÜ   € Üˆ�‰Ð/Ô0Ø�K€DØ€JÜ˜T–?‰ˆØ�KˆØ˜•E�{ˆØ×ÑÜØ—>‘>ÄuÈUÄ|Ó#TÁ|À!§G¡G¨D¨JÕ$7¸Õ$:¸1×$=Ð$=Á|Ñ#TÐVXóö	
ñ #ô ˜
 F¨D¯H©HÓ5€Hä˜e¨d¯o©oÓ>€HØ‡I�I�d—l‘l¨t¯©×/KÐ/KÀ8€IÔLä�$Ö!ùò $Us   Á,*Dc           	      óŽ  € \        V P                  R 4       \        WP                  4       . p\        V4       FŸ  w  rV. p\	        \        V4      4       FP  pWX8X  d   VP                  R4       K  VP                  RVP                  WX3,          ^ ,          ^ ,           24       KR  	  VP                  \        WVP                  VP                  V4      4       K¡  	  \        VRV P                  4      p	\        WV P                  4      p
TP                  V P                  V P                  ;'       d    T
R7       \        W	4       R# )zPrepare a jaccl hostfileNr^   Újacclr  )r   rJ   rM   r|   r’   r“   rH   rG   r   rD   r	   r  rv   rt   rŸ   r[   )rX   rI   rG   rs   Újaccl_hostsru   rK   Úrdmar›   rY   r   s   &&&&       r   Úconfigure_jacclr  Ñ  sñ   € Üˆ�‰Ð0Ô1ÜˆE—<‘<Ô à€KÜ˜%Ö ‰ˆØˆÜ”s˜5“zÖ"ˆAØŒvØ—‘˜DÖ!à—‘˜e C§G¡G¨A¨D¥M°!Õ$4°QÕ$7Ð#8Ð9Ö:ñ	 #ð
 	×Ñœ4 §>¡>°1·5±5¸$Ó?Ö@ñ !ô ˜ W¨d¯h©hÓ7€Hä˜e¨d¯o©oÓ>€HØ‡I�I�d—l‘l¨t¯©×/KÐ/KÀ8€IÔLä�$Ö!r   c           	      óR  € \        V P                  R 4       \        WP                  4       . p\        V4      pVw  r7\	        V4       Fñ  w  r‰W,          p
W8^,
          ,          pW8^,           V,          ,          p. pV F‡  pWëV39  d   VP                  R4       K  . p\        V4       F7  pVP                  RVP                  Wž3,          V,          ^ ,           24       K9  	  TP                  V^8X  d
   V^ ,          MT4       K‰  	  VP                  \        WŠP                  V
P                  V4      4       Kó  	  \        VRV P                  4      p\        WV P                  4      pTP                  V P                  V P                  ;'       d    TR7       \        V V4       R# )zPrepare a jaccl-ring hostfileNr^   ú
jaccl-ringr  )r   rJ   rM   r“   r|   rH   r’   rG   r   rD   r	   r  rv   rt   rŸ   r[   )rX   rI   rG   r  rs   r  rÜ   r  ru   rØ   rK   Ú	peer_leftÚ
peer_rightÚrdmasÚotherr  r¾   rY   r   s   &&&&&              r   Úconfigure_jaccl_ringr  æ  sN  € Üˆ�‰Ð5Ô6ÜˆE—<‘<Ô à€KÜ�E“
€IØ�K€DÜ˜T–?‰ˆØ�KˆØ˜Q�•Kˆ	Ø˜q�5 IÕ-Õ.ˆ
ØˆÛˆEØ¨
Ð3Ô3Ø—‘˜TÖ"à�Ü˜už�AØ—K‘K %¨¯©°°Õ(<¸QÕ(?ÀÕ(BÐ'CÐ DÖEñ &à—‘¨°¬
˜T !žW¸Ö=ñ ð 	×Ñœ4 §>¡>°1·5±5¸%Ó@ÖAñ #ô ˜ \°4·8±8Ó<€Hä˜e¨d¯o©oÓ>€HØ‡I�I�d—l‘l¨t¯©×/KÐ/KÀ8€IÔLä�$˜Ö!r   c                 ó–  € \        V P                  R 4       \        WP                  4      w  r4V P                  '       d   \	        WV4       R# \        WV4      p\        W44      pV P                  Ef   \        V4      p\        WR4      p\        WR4      p	\        WP                  R4      p
V	'       g7   V'       g/   \        R4       \        R4       \        P                  ! ^4       R# V
'       d   V'       d   \        WWR4       R# V
'       d   V	'       d   \!        WWW^ ,          V4       R# V	'       d   \#        WWW^ ,          V4       R# \        R4       \        R4       \        P                  ! ^4       R# V P                  R8X  d-   \        V4      p\        W4       \#        WWW^ ,          V4       R# V P                  R8X  d/   \        W4       \        WP                  4       \        WWR4       R# V P                  R8X  dB   \        V4      p\        W4       \        WP                  4       \!        WWW^ ,          V4       R# R# )	z,Preparing for communication over thunderboltNFz(Neither thunderbolt mesh nor ring found.z>Perhaps run with --dot to generate a plot of the connectivity.z,RDMA is not available and ring is not found.r  r  r  )r   rJ   rÅ   ÚdotrÒ   rx   rÉ   Úbackendrì   rï   rö   rh   r   ra   rb   r  r  r  )rX   rI   rs   r   r€   rG   rÈ   rç   Úhas_meshrõ   Úhas_rdmas   &&&        r   Úprepare_tb_hostfiler$    s›  € Üˆ�‰ÐDÔFÜ#7¸¿|¹|Ó#LÑ €Hà‡x‡x€xÜ˜uÐ0BÔCÙä
˜Ð*<Ó
=€CÜ+¨HÓI€Là‡|�|ÓÜ˜lÓ+ˆÜ# E¸Ó?ˆÜ# E°%Ó8ˆÜ˜e§\¡\°5Ó9ˆç§ÜÐ@ÔAÜÐVÔWÜ�HŠH�QŽKçŸ(Ü˜D¨Ö6çŸ(Ü  ¨c¸µ8¸WÖEçÜ˜4¨°1­X°wÖ?ô ÐDÔEÜÐVÔWÜ�HŠH�QŽKà	�‰˜Ô	Ü˜lÓ+ˆÜ˜Ô&Ü�t C¨q­°7Ö;à	�‰˜Ô	 Ü˜Ô-Ü�5Ÿ,™,Ô'Ü˜ SÖ2à	�‰˜Ô	%Ü˜lÓ+ˆÜ˜Ô&Ü�5Ÿ,™,Ô'Ü˜T¨#°Q­x¸ÖAñ	 
&r   c            	      ó:  € \         P                  ! R R7      p V P                  RRRR7       V P                  RRRR	7       V P                  R
RRR7       V P                  RRR7       V P                  RRR.RRRR7       V P                  RRR7       V P                  RR\        ^ RRR7       V P                  RRRR7       V P                  R. R(ORRR 7       V P                  R!R". R#R$7       V P	                  4       pVP
                  e,   \        P                  ! VP
                  4      P                  pM*\        P                  ! VP                  4      P                  p\        VP                  R%R&P                  R' V 4       4       24       \        W!P                  4      p\        W24       UUu. uF  w  rEV'       g   K  VNK  	  pppV Uu. uF  qD'       g   K  VNK  	  ppVP                   R8X  d   \#        W4       R# \%        WV4       R# u uppi u upi ))z6Configure remote machines for use with MLX distributed)Údescriptionz	--verboseÚ
store_truezPrint debug messages in stdout)ÚactionÚhelpz--hostsz	127.0.0.1zA comma separated list of hosts)Údefaultr)  z--ignore-unreachablez+Ignore hosts that are not reachable via sshz
--hostfilezThe file containing the hosts)r)  z--overÚthunderboltÚethernetz&What type of connectivity to configureT)Úchoicesr*  r)  Úrequiredz--output-hostfilez+If provided, save the hostfile to this pathz--auto-setupz--no-auto-setuprt   N)r(  ÚnargsÚdestr*  z--dotz*Output the topology in DOT format and exitz	--backendz&Which distributed backend to configure)r-  r*  r)  z--envrH   z&Set environment variables for the jobs)r(  r*  r)  zChecking for ssh access for z, c              3   ó8   "  € T F  qP                   x € K  	  R # 5ir   ró   )rk   rK   s   & r   rm   Úmain.<locals>.<genexpr>s  s   é € Ð0OÉÀA·¶Ëùro   )r  r  r  )ÚargparseÚArgumentParserÚadd_argumentr
   Ú
parse_argsrY   r	   Ú	from_filerI   Ú	from_listr   rJ   r–   r	  r  rr   Úoverr  r$  )ÚparserrX   rI   rs   rá   rK   s         r   Úmainr;  8  s9  € Ü×$Ò$ØLô€Fð ×ÑØ˜LÐ/Oð ô ð ×ÑØ˜;Ð-Nð ô ð ×ÑØØØ:ð ô ð
 ×Ñ˜Ð+JÐÔKØ
×ÑØØ 
Ð+ØØ5Øð ô ð ×ÑØÐ"Oð ô ð ×ÑØØÜ!ØØØð ô ð ×ÑØ˜Ð+Wð ô ð ×ÑØÚ/ØØ5ð	 ô ð ×ÑØØØØ5ð	 ô ð ×ÑÓ€Dà‡}�}Ò Ü×"Ò" 4§=¡=Ó1×7Ñ7‰ä×"Ò" 4§:¡:Ó.×4Ñ4ˆô Ø�‰Ø
& t§y¡yÑ0OÉÓ0OÓ'OÐ&PÐQôô $ E×+BÑ+BÓC€GÜ˜wÔ.Ô4Ñ.‘4�1´!�QˆQÑ.€EÑ4Ù!Ó'™'�Q£Q�qˆq™'€GÐ'ð ‡y�y�JÔÜ! $Ö.ô 	˜D¨Ö1ùó 5ùÚ's   Æ2HÇHÇ	HÇH)F)FT)T).r3  rS   r•   ra   r  Úcollectionsr   Údataclassesr   Ú
subprocessr   r   Útypingr   Úmlx.coreÚcoreÚmxÚcommonr   r	   r
   r   r   r   r   r*   r4   rM   r[   rh   rv   rx   r¨   rÅ   rÉ   rÒ   rì   rï   rö   r	  r  r  r  r  r$  r;  r    r   r   Ú<module>rD     så   ðó Û Û Û 
Û Ý #Ý !ß #Ý å ÷÷ ð ÷ð ó ðð ÷ ð  ó ð ð ÷!ð !ó ð!ô
@ò28ôô:	÷>ñ >òB	ò>(òB	òò>3ô:ô&ô=ò@"ò"ò("ò*"ò:2BôjH2r   