
    %ɷiN                        d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZ ddlmZmZ d Zd	 Zd
efdZ eej(                  j+                  dd            Zd Z ej0                  edk  d      d        Z ej0                  edk  d      d        Z ej0                  edk  d      ddefd       Z ej0                  edk  d      dded
efd       Zed        Zd Ze dk(  r e        yy) zT
Test file to ensure that in general certain situational setups for notebooks work.
    N)markraises)ChildFailedError)PartialStatenotebook_launcher)require_bnb)is_bnb_availableis_xpu_availablec                  0    t        dt                       y )NPartialState:
)printr        ^/var/www/html/venv/lib/python3.12/site-packages/accelerate/test_utils/scripts/test_notebook.pybasic_functionr      s    	OLN+
,-r   c                     | j                         ry | j                         }|dkD  r| j                  |dz
         t        d      t	        dt                       y )Nr      z&The nut hasn't cracked yet! Try again.r   )emptygetputRuntimeErrorr   r   )queuetrials     r   tough_nut_functionr   "   sN    {{}IIKEqy		%!)CDD	OLN+
,-r   	sleep_secc                 |    t               }|j                  dz  dk(  rt        d      t        j                  |        y )N   r   +I'm an even process. I don't like to sleep.)r   process_indexr   timesleep)r   states     r   bipolar_sleep_functionr#   -   s4    NEQ!#HII

9r   ACCELERATE_NUM_PROCESSESr   c                  0    t        t        dt               y )Nr   num_processesr   r   NUM_PROCESSESr   r   r   test_can_initializer*   8   s    nbFr   r   z<Need at least 2 processes to test static rendezvous backends)reasonc                  2    t        t        dt        d       y )Nr   staticr'   rdzv_backendr(   r   r   r   test_static_rdzv_backendr0   <   s    nbT\]r   z:Need at least 2 processes to test c10d rendezvous backendsc                  2    t        t        dt        d       y )Nr   c10dr.   r(   r   r   r   test_c10d_rdzv_backendr3   A   s    nbTZ[r   z1Need at least 2 processes to test fault tolerancemax_restartsc                     dd l m} t               r|j                  d      }n|j                  d      }|j	                         }|j                  |        t        t        |ft        |        y )Nr   spawnfork)r'   r4   )	torch.multiprocessingmultiprocessingr
   get_contextQueuer   r   r   r)   )r4   mpctxr   s       r   test_fault_tolerantr>   F   sT     ' nnW%nnV$IIKE	IIl(5(-^jkr   z,Need at least 2 processes to test monitoringmonitor_intervalc                     t        j                          }t        t        d      5  t        t        |ft
        |        d d d        t        j                          |z
  |k  sJ d       y # 1 sw Y   +xY w)Nr   match)r'   r?   z,Monitoring did not stop the process in time.)r    r   r   r   r#   r)   )r?   r   
start_times      r   test_monitoringrD   U   se    J	 (U	V 
"L'-		

 99;#i/_1__/
 
s   A))A2c                      t        t        d      5  dd l} t        t        dt
               d d d        y # 1 sw Y   y xY w)NzPlease keep these importsrA   r   r   r&   )r   r   bitsandbytesr   r   r)   )bnbs    r   test_problematic_importsrH   b   s5    	$?	@ K"."MJK K Ks   6?c                  X   t        d       t                t        d       t                t        d       t                t        d       t	                t        d       t                t               rt        d       t                t        dkD  rt               j                          y y )NzTest basic notebook can be ranzTest static rendezvous backendzTest c10d rendezvous backendzTest fault tolerantzTest monitoringzTest problematic imports (bnb)r   )r   r*   r0   r3   r>   rD   r	   rH   r)   r   destroy_process_groupr   r   r   mainrK   j   s}    	
*+	
*+	
()	
 	
./ "q,,. r   __main__)   )g{Gz?d   )!__doc__osr    pytestr   r   0torch.distributed.elastic.multiprocessing.errorsr   
accelerater   r   accelerate.test_utilsr   accelerate.utilsr	   r
   r   r   intr#   environr   r)   r*   skipifr0   r3   r>   floatrD   rH   rK   __name__r   r   r   <module>r[      sH   
   M 6 - ?.
.c  BJJNN#=qABG ]Q'ef^ g^ ]Q'cd\ e\ ]Q'Z[lc l \l ]Q'UV	`e 	`s 	` W	` K K/$ zF r   