
    
9j                        S r SSKrSSKrSSKJrJr  SSKJr  SSKJ	r	J
r
  SSKJr  SSKJrJrJr  S rS	 rS
\4S jrS r\" \R,                  R/                  SS5      5      r\R2                  " \S:  SS9rS r\S 5       r\S 5       r\S 5       r\SS\4S jj5       r\SS\ S
\4S jj5       r!\S 5       r"S r#\$S:X  a  \#" 5         gg)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_rocm_availableis_xpu_availablec                  0    [        S[        5        35        g )NPartialState:
)printr        e/home/wildlama/miniconda3/lib/python3.13/site-packages/accelerate/test_utils/scripts/test_notebook.pybasic_functionr      s    	OLN+
,-r   c                     U R                  5       (       a  g U R                  5       nUS:  a  U R                  US-
  5        [        S5      e[	        S[        5        35        g )Nr      z&The nut hasn't cracked yet! Try again.r   )emptygetputRuntimeErrorr   r   )queuetrials     r   tough_nut_functionr   "   sP    {{}}IIKEqy		%!)CDD	OLN+
,-r   	sleep_secc                     [        5       nUR                  S-  S:X  a  [        S5      e[        R                  " U 5        g )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   c                      SS K n U R                  R                  5       (       a'  U R                  R	                  5       (       a   S5       eg g )Nr   un   Child process started in bad-fork state — notebook_launcher tainted the parent's CUDA driver before forking.)torchcudais_available_C_cuda_isInBadFork)r&   s    r   assert_clean_cuda_fork_functionr+   5   sG    
 zz  88--// 	
7	
// !r   ACCELERATE_NUM_PROCESSESr   r   zNeed at least 2 processes)reasonc                  *    [        [        S[        S9  g Nr   num_processesr   r   NUM_PROCESSESr   r   r   test_can_initializer4   G   s    nbFr   c                  *    [        [        S[        S9  g r/   )r   r+   r3   r   r   r   test_clean_cuda_forkr6   K   s     5rWr   c                  ,    [        [        S[        SS9  g )Nr   staticr1   rdzv_backendr2   r   r   r   test_static_rdzv_backendr;   R   s    nbT\]r   c                  ,    [        [        S[        SS9  g )Nr   c10dr9   r2   r   r   r   test_c10d_rdzv_backendr>   W   s    nbTZ[r   max_restartsc                     SS K Jn  [        5       (       d  [        5       (       a  UR	                  S5      nOUR	                  S5      nUR                  5       nUR                  U 5        [        [        U4[        U S9  g )Nr   spawnfork)r1   r?   )
torch.multiprocessingmultiprocessingr   r
   get_contextQueuer   r   r   r3   )r?   mpctxr   s       r   test_fault_tolerantrI   \   s`     ' .00nnW%nnV$IIKE	IIl(5(-^jkr   monitor_intervalc                     [         R                   " 5       n[        [        SS9   [        [        U4[
        U S9  S S S 5        [         R                   " 5       U-
  U:  d   S5       eg ! , (       d  f       N2= f)Nr   match)r1   rJ   z,Monitoring did not stop the process in time.)r!   r   r   r   r$   r3   )rJ   r   
start_times      r   test_monitoringrO   l   s`    J	 (U	V"L'-		
 
W 99;#i/_1__/ 
W	Vs   A&&
A4c                      [        [        SS9   SS Kn [        [        S[
        S9  S S S 5        g ! , (       d  f       g = f)NzPlease keep these importsrL   r   r   r0   )r   r   bitsandbytesr   r   r3   )bnbs    r   test_problematic_importsrS   y   s)    	$?	@"."MJ 
A	@	@s   0
>c                     [        S5        [        5         [        S5        [        5         [        S5        [        5         [        S5        [	        5         [        S5        [        5         [        S5        [        5         [        5       (       a  [        S5        [        5         [        S:  a  [        5       R                  5         g g )	NzTest basic notebook can be ranz0Test clean CUDA fork (regression test for #3925)zTest static rendezvous backendzTest c10d rendezvous backendzTest fault tolerantzTest monitoringzTest problematic imports (bnb)r   )r   r4   r6   r;   r>   rI   rO   r	   rS   r3   r   destroy_process_groupr   r   r   mainrV      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   r   intr$   r+   environr   r3   skipifrequire_multi_processr4   r6   r;   r>   rI   floatrO   rS   rV   __name__r   r   r   <module>rg      s-   
   M 6 - R R.
.c 
 BJJNN#=qABMA$5>YZ G X X ^ ^ \ \ lc l l 	`e 	`s 	` 	` K K/( zF r   