+
    &j                         ^ RI t ^ RIt^ RIt^ RIt^ RIHtHt ^ RIHt ^ RI	H
t
Ht ] ! R R4      4       t] ! R R4      4       t ! R	 R
] P                  4      tR tR tR tR tR# )    N)	dataclassfield)Path)OptionalUnionc                   ,   a  ] tR t^t o V 3R ltRtV tR# )Hostc                   < V ^8  d   Qh/ S[ ;R&   S[;R&   S[S[,          ;R&   S[S[S[S[S[S[,          3,          ,          ,          ;R&   # )   rankssh_hostnameipsrdma)intstrlistr   r   )format__classdict__s   "u/Users/jameslopez/projects/CWCArchive/cwc-podcast/.venv/lib/python3.14/site-packages/mlx/_distributed_utils/common.py__annotate__Host.__annotate__   sP     
I    
cN	 
 xc49n-.
//      N)__name__
__module____qualname____firstlineno____annotate_func____static_attributes____classdictcell__r   s   @r   r	   r	      s      r   r	   c                   l   a  ] tR t^t o Rt]! ]R7      tR t]	R 4       t
]	R	R l4       tV 3R ltRtV tR# )
Hostfile )default_factoryc                    R V P                   RV P                  RV P                   Uu. uF)  pRVP                  RVP                  RVP
                  /NK+  	  up/# u upi )backendenvshostssshr   r   )r'   r(   r)   r   r   r   )selfhs   & r   to_jsonHostfile.to_json   s^    t||DII#A quufaffE#
 	
s   /Ac                   \        V4      pVP                  4       '       g   \        R\        V4       R24      h \        P
                  ! \        V4      4      pRp. p. p\        V\        4      '       d   VR,          pVR,          pVR,          pM\        V\        4      '       d   Tp\        V4       UUu. uF9  w  rg\        WgR,          VP                  R. 4      VP                  R	. 4      4      NK;  	  pppV ! WSV4      # u uppi   \         d+   p\        R
\        T4       R\        T4       R24      ThRp?ii ; i)a  Parse the json hostfile that contains both the hostnames to ssh into and
the ips to communicate over when using the ring backend. It can also
contain the backend to be used and environment variables to set when
launching a distributed job.

Example:

    {
        "backend": "jaccl",
        "envs": [
            "MLX_METAL_FAST_SYNCH=1"
        ],
        "hosts": [
            {"ssh": "hostname1", "ips": ["123.123.123.1"], "rdma": [null, "rdma_en2", "rdma_en3"]},
            {"ssh": "hostname2", "ips": ["123.123.123.2"], "rdma": ["rdma_en2", null, "rdma_en3"]},
            ...
            {"ssh": "hostnameN", "ips": ["123.123.123.N"], "rdma": ["rdma_en2", "rdma_en3", null]},
        ]
    }

Args:
    hostfile (str): The path to the json file containing the host
        information
z	Hostfile z doesn't existr$   r'   r(   r)   r*   r   r   zFailed to parse hostfile z ()N)r   exists
ValueErrorr   jsonloadopen
isinstancedictr   	enumerater	   get	Exception)	clshostfiledatar'   r(   r)   ir,   es	   &&       r   	from_fileHostfile.from_file$   s.   4 >  yX~FGG	99T(^,DGDE$%%y/F|WD$'' &e,,DA Q%!%%r"2AEE&"4EF,  
 ut,,  	+CM?"SVHAF	s*   A=D	 8?D7D	 D	 	D>%D99D>c           
     6   . p\        VP                  R 4      4       F_  w  rEVR8X  d   \        R4      h \        P                  ! V4       V.p\        V4       F  pVP                  \        WEV. 4      4       K!  	  Ka  	  V ! V4      #   \         d    . p LIi ; i),r$   zHostname cannot be empty)r8   splitr2   	ipaddress
ip_addressrangeappendr	   )r;   hostlistrepeatsr)   r>   r,   r   s   &&&    r   	from_listHostfile.from_listZ   s    hnnS12DABw !;<<$$Q'c 7^T!R01 $ 3 5z	  s   BBBc                ^   < V ^8  d   Qh/ S[ S[,          ;R&   S[;R&   S[ S[,          ;R&   # )r   r)   r'   r(   )r   r	   r   )r   r   s   "r   r   Hostfile.__annotate__   s2     :    s)1	 r   r   N)   )r   r   r   r   r'   r   r   r(   r-   classmethodr@   rK   r   r   r    r!   s   @r   r#   r#      sL      GD1D
 3 3j  O  r   r#   c                   *   a  ] tR t^jt o RR ltRtV tR# )OptionalBoolActionNc                    VP                  R 4      '       d   \        W P                  R4       R# \        W P                  R4       R# )z--no-FTN)
startswithsetattrdest)r+   parser	namespacevaluesoption_strings   &&&&&r   __call__OptionalBoolAction.__call__k   s/    ##G,,Iyy%0Iyy$/r   r   )N)r   r   r   r   r[   r   r    r!   s   @r   rR   rR   j   s     0 0r   rR   c                 @    \        V 4      p V ^ 8:  d   \        R4      hV # )r   zNumber should be positive)r   r2   )xs   &r   positive_numberr_   r   s#    AAAv455Hr   c                 b    V '       g   R # \         P                  VR&   \        R.VORN5/ VB  R # )Nfilez[32m[INFO][0msysstderrprint)verboseargskwargss   &*,r   logrj   y   s-    ZZF6N	
7T7977r   c                  N    \         P                  VR &   \        R.V ORN5/ VB  R# )ra   z[33m[WARN]rb   Nrc   rh   ri   s   *,r   log_warningrm      s'    ZZF6N	
7T7977r   c                  N    \         P                  VR &   \        R.V ORN5/ VB  R# )ra   z[31m[ERROR]rb   Nrc   rl   s   *,r   	log_errorro      s'    ZZF6N	
8d8I88r   )argparserE   r3   rd   dataclassesr   r   pathlibr   typingr   r   r	   r#   ActionrR   r_   rj   rm   ro   r   r   r   <module>ru      sv       
 (  " 0 0 0 R R Rj0 088
9r   