
    g                        d dl Z d dlZd dlZd dlZd dlmZ d dlm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 d	lmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%  e#            rd d
lm&Z' nd dlm'Z' d%dZ(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d%dZ5d%dZ6d Z7d Z8d Z9d Z:d  Z;d! Z<d" Z=d# Z>e?d$k    r e>             dS dS )&    N)deepcopy)Path)
DataLoaderDataset)Accelerator)SeedableRandomSamplerprepare_data_loader)AcceleratorState)RegressionDatasetare_the_same_tensors)DataLoaderConfigurationDistributedTypegatheris_bf16_availableis_datasets_availableis_ipex_availableis_mlu_availableis_musa_availableis_npu_availableis_pytest_availableis_xpu_availableset_seedsynchronize_rng_states)RegressionModel4XPU)RegressionModelFc                     |r1t          || t          |                     }t          | ||          S t          | |d|          S )zBCreates a dataloader that can also use the `SeedableRandomSampler`)	generatordata_sourcenum_samples)
batch_sizesamplerT)r    shuffler   )r   lenr   )	train_setr   r    use_seedable_samplerr!   s        e/var/www/html/ai-engine/env/lib/python3.11/site-packages/accelerate/test_utils/scripts/test_script.pygenerate_baseline_dataloaderr'   8   s_     
_ (!I
 
 

 )
GLLLL)
DT]^^^^    c                 4    t          d| j                    d S )NzPrinting from the main process printprocess_indexstates    r&   
print_mainr/   G   "    	
AE,?
A
ABBBBBr(   c                 4    t          d| j                    d S )Nz%Printing from the local main process )r+   local_process_indexr-   s    r&   print_local_mainr3   K   s"    	
M%2K
M
MNNNNNr(   c                 4    t          d| j                    d S )NPrinting from the last process r*   r-   s    r&   
print_lastr6   O   r0   r(   c                 :    t          d| d| j                    d S )NPrinting from process : r*   )r.   process_idxs     r&   print_onr;   S   s*    	
G;
G
G%2E
G
GHHHHHr(   c                  D   t                      } | j        }t          d          }|                                 5  | j        rRt          j        d           t          |d          5 }|                    d           d d d            n# 1 swxY w Y   n=t          |d          5 }|                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | 	                                 | j        rt          |          5 }d
                    |                                          }d d d            n# 1 swxY w Y   	 |                    d          s
J d            |dk    r|                    d          s
J d            |                    d          | j        dz
  k    s+J d	|                    d
          dz    d| j                     n## t          $ r |                                  w xY w| j        r(|                                r|                                 | 	                                 t%          j                    }t)          j        |          5   |                     t.                    | j                   d d d            n# 1 swxY w Y   |                                                                }| j        r|dk    sJ | d            n7|                                                                dk    sJ | d            |                    d           |                    d           t)          j        |          5   |                     t<                    | j                   d d d            n# 1 swxY w Y   | j        r-|                                                                dk    sJ n,|                                                                dk    sJ |                    d           |                    d           t)          j        |          5   |                      tB                    | j                   d d d            n# 1 swxY w Y   | j"        r=|                                                                d| j        j        dz
   k    sJ n,|                                                                dk    sJ |                    d           |                    d           tG          |          D ]}t)          j        |          5   | $                    tJ          |          | j        |           d d d            n# 1 swxY w Y   | j&        |k    r8|                                                                d| d| j&         k    sJ n,|                                                                dk    sJ |                    d           |                    d           d S )Nzcheck_main_process_first.txt皙?za+zCurrently in the main process
zNow on another process
 zMain process was not first   zOnly wrote to file zNow on another processz times, not z Printing from the main process 0z$ != Printing from the main process 0z != ""r   z&Printing from the local main process 0r5   )r,   r8   r9   )'r   num_processesr   main_process_firstis_main_processtimesleepopenwritewait_for_everyonejoin	readlines
startswithendswithcountAssertionErrorunlinkexistsioStringIO
contextlibredirect_stdouton_main_processr/   r.   getvaluerstriptruncateseekon_local_main_processr3   is_local_main_processon_last_processr6   is_last_processrange
on_processr;   r,   )acceleratorr@   pathftextresultr:   s          r&   process_execution_checkrd   W   s   --K-M.//D		'	'	)	) 4 4& 	4JsOOOdD!! ;Q9:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; dD!! 4Q23334 4 4 4 4 4 4 4 4 4 4 4 4 4 44 4 4 4 4 4 4 4 4 4 4 4 4 4 4 !!###" $ZZ 	*1771;;==))D	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*		??#DEEccGccccq  }}%?@@^^B^^^^

566+:SVW:WWWWvTZZ0H%I%IA%Mvv[f[tvv XWWW 	 	 	KKMMM	 " t{{}} !!###
A		#A	&	& C C/##J//0ABBBC C C C C C C C C C C C C C CZZ\\  ""F" >;;;;=l=l=l;;;;zz||""$$***v,=,=,=***JJqMMMFF1III		#A	&	& O O;))*:;;K<MNNNO O O O O O O O O O O O O O O( +zz||""$$(PPPPPPzz||""$$****JJqMMMFF1III		#A	&	& C C/##J//0ABBBC C C C C C C C C C C C C C C" +zz||""$$(o+J[JilmJm(o(oooooozz||""$$****JJqMMMFF1III]++  '** 	h 	hGK""8;"GGHY[fggg	h 	h 	h 	h 	h 	h 	h 	h 	h 	h 	h 	h 	h 	h 	h$33::<<&&((,o[,o,oT_Tm,o,oooooo::<<&&((B....	

1	q				 s   ,C%B;CB	CB	C#C9CC			CC		CC #C (EE
E
BG# # H0)J%%J),J)&)NN"N)Q99Q= Q=,U;;U?	U?	c                  t    t                      } | j        dk    rt          d           t          |            d S )Nr   zTesting, testing. 1, 2, 3.)r
   r2   r+   r-   s    r&   init_state_checkrf      s9    E A%%*+++	%LLLLLr(   c                     t                      } t          dg           t          t          j                              s
J d            | j        t          j        k    rFt          dg           t          t          j                                                  s
J d            nZ| j        t          j	        k    rEt          dg           t          t          j
                                                  s
J d            t          j                    }t          dg|           t          |                                          s
J d	            | j        d
k    rt          d           d S d S )Ntorchz*RNG states improperly synchronized on CPU.cudaz*RNG states improperly synchronized on GPU.xpuz*RNG states improperly synchronized on XPU.r   )r   z0RNG states improperly synchronized in generator.r   zAll rng are properly synched.)r
   r   r   rh   get_rng_statedistributed_typer   	MULTI_GPUri   	MULTI_XPUrj   	Generator	get_stater2   r+   )r.   r   s     r&   rng_sync_checkrq      sT   EG9%%% 3 5 566dd8dddd!:::x(((#EJ$<$<$>$>??mmAmmmmm		?#<	<	<w'''#EI$;$;$=$=>>ll@llll!!IK=I>>>>	 3 3 5 566jj8jjjj A%%-..... &%r(   c                  x   t                      } d| j        z  }t          t          |          d          }t	          || j        | j        | j        d          }g }|D ]$}|                    t          |                     %t          j
        |          }t          | j        |t          |                     t          j        |                                t          j        d|                                                    s
J d            t          t          |          d          }t	          || j        | j        | j        dd          }g }|D ]$}|                    t          |                     %t          j
        |          }t          j        |                                t          j        d|                                                    s
J d            | j        dk    rt          d	           t          t          |          dd
          }t	          || j        | j        | j        d          }g }|D ]$}|                    t          |                     %t          j
        |                                          }|                                 |t'          t          |                    k    s
J d            t          t          |          dd
          }t	          || j        | j        | j        dd          }g }|D ]$}|                    t          |                     %t          j
        |                                          }|                                 |t'          t          |                    k    s
J d            | j        dk    rt          d           d S d S )N       r    T)put_on_devicer   %Wrong non-shuffled dataloader result.)rv   split_batchesz Non-shuffled dataloader passing.r    r"   !Wrong shuffled dataloader result.zShuffled dataloader passing.)r
   r@   r   r]   r	   devicer,   appendr   rh   catr+   typeequalcpuarangelongtolistsortlistr2   r.   lengthdlrc   batchs        r&   dl_preparation_checkr      s   E%%%F	E&MMa	0	0	0B	Ru/BEDWgk	l	l	lBF % %fUmm$$$$YvF	%
vtBxx000;vzz||U\!V%<%<%A%A%C%CDDmmFmmmm	E&MMa	0	0	0B	

 
 
B F % %fUmm$$$$YvF;vzz||U\!V%<%<%A%A%C%CDDmmFmmmma0111	E&MMa	>	>	>B	Ru/BEDWgk	l	l	lBF % %fUmm$$$$Yv%%''F
KKMMMT%--(((((*M(((	E&MMa	>	>	>B	

 
 
B F % %fUmm$$$$Yv%%''F
KKMMMT%--(((((*M((( A%%,----- &%r(   c            	      :   t                      } d| j        z  }t          t          |          d          }t	          || j        | j        | j        dd          }g }|D ]$}|                    t          |                     %t          j
        |          }t          j        |                                t          j        d|                                                    s
J d            t          t          |          d          }t	          || j        | j        | j        ddd          }g }|D ]$}|                    t          |                     %t          j
        |          }t          j        |                                t          j        d|                                                    s
J d            | j        dk    rt          d	           t          t          |          dd
          }t	          || j        | j        | j        dd          }g }|D ]$}|                    t          |                     %t          j
        |                                          }|                                 |t%          t          |                    k    s
J d            t          t          |          dd
          }t	          || j        | j        | j        ddd          }g }|D ]$}|                    t          |                     %t          j
        |                                          }|                                 |t%          t          |                    k    s
J d            | j        dk    rt          d           d S d S )Nrs   rt   ru   T)rv   dispatch_batchesr   rw   )rv   rx   r   z(Non-shuffled central dataloader passing.ry   rz   z$Shuffled central dataloader passing.)r
   r@   r   r]   r	   r{   r,   r|   r   rh   r}   r   r   r   r   r+   r   r   r   r2   r   s        r&   central_dl_preparation_checkr      s   E%%%F	E&MMa	0	0	0B	
EL%-u/BRVim
 
 
B F % %fUmm$$$$YvF;vzz||U\!V%<%<%A%A%C%CDDmmFmmmm	E&MMa	0	0	0B	

 
 
B F % %fUmm$$$$YvF;vzz||U\!V%<%<%A%A%C%CDDmmFmmmma8999	E&MMa	>	>	>B	
EL%-u/BRVim
 
 
B F % %fUmm$$$$Yv%%''F
KKMMMT%--(((((*M(((	E&MMa	>	>	>B	

 
 
B F % %fUmm$$$$Yv%%''F
KKMMMT%--(((((*M((( A%%455555 &%r(   c                     t                      }  G d dt                    } G d d          } |t          d| j        z                      } |t	          |          d          }t          ||          }t          || j        | j        | j                  }t          |j
        d	          r&t          |j
        j
        |          s
J d
            d S t          |j
        |          s
J d
            d S )Nc                        e Zd Zd Zd Zd ZdS )+custom_sampler_check.<locals>.CustomDatasetc                     || _         d S Ndata)selfr   s     r&   __init__z4custom_sampler_check.<locals>.CustomDataset.__init__<  s    DIIIr(   c                 *    t          | j                  S r   )r#   r   r   s    r&   __len__z3custom_sampler_check.<locals>.CustomDataset.__len__?  s    ty>>!r(   c                     | j         |         S r   r   )r   indexs     r&   __getitem__z7custom_sampler_check.<locals>.CustomDataset.__getitem__B  s    9U##r(   N)__name__
__module____qualname__r   r   r    r(   r&   CustomDatasetr   ;  sA        	 	 		" 	" 	"	$ 	$ 	$ 	$ 	$r(   r   c                   0    e Zd Zd	dededefdZd Zd ZdS )
0custom_sampler_check.<locals>.CustomBatchSamplerTdataset_lengthr    r"   c                 T    || _         t          j        |          | _        || _        d S r   )r    npr   
data_indexr"   )r   r   r    r"   s       r&   r   z9custom_sampler_check.<locals>.CustomBatchSampler.__init__F  s%    (DO i77DO"DLLLr(   c              3      K   t          |           }| j        r%t          j                            | j                  }n| j        }t          j        ||          }|E d {V  d S r   )r#   r"   r   randompermutationr   array_split)r   num_batchesr   outputs       r&   __iter__z9custom_sampler_check.<locals>.CustomBatchSampler.__iter__K  sj      d))K| (	--do>>^E;77Fr(   c                 ^    t          j        t          | j                  | j        z            S r   )mathceilr#   r   r    r   s    r&   r   z8custom_sampler_check.<locals>.CustomBatchSampler.__len__T  s#    9S11DOCDDDr(   N)T)r   r   r   intboolr   r   r   r   r(   r&   CustomBatchSamplerr   E  se        	# 	#3 	#C 	#$ 	# 	# 	# 	#
	 	 		E 	E 	E 	E 	Er(   r   rs   rt   ru   )batch_samplerr   z>Custom sampler was changed after calling `prepare_data_loader`)r
   r   r]   r@   r#   r   r	   r{   r,   hasattrr   
isinstance)r.   r   r   datasetr!   r   s         r&   custom_sampler_checkr   8  sq   E$ $ $ $ $ $ $ $E E E E E E E E$ mE"u':":;;<<G  W!<<<G	G7	3	3	3B	Ru/BEDW	X	XBr11 L*,>
 
 	L 	LK	L 	L 	L 	L 	L 0
 
 	L 	LK	L 	L 	L 	L 	Lr(   c                  z   t          d           t          dd          } t          | dd          }t          d          }t	          |          }|                    |          }g }t          d	          D ]"}|D ]}|                    |d
                    #t          j	        |          }t          d           |
                    d           g }t          d	          D ]"}|D ]}|                    |d
                    #t          j	        |          }t          j        ||          s
J d            d S )N*   
   r   seed   Try   r%   dataloader_config   xr   z;Did not obtain the same items with the same seed and epoch.)r   r   r   r   r   preparer]   r|   rh   r}   	set_epochallclose)r$   train_dlconfigr_   original_items_r   	new_itemss           r&   check_seedable_samplerr   f  s^   RLLL!"555I)4@@@H$$???F777K""8,,HN1XX . . 	. 	.E!!%*----	.Y~..N RLLLqI1XX ) ) 	) 	)EU3Z((((	)	)$$I>.)44ss6ssssssr(   c                  h   t          d           t          d          } t          |           }|j        dk    s
J d            t	          t          t          d                    dd          }t          |d	          }|j        j        j	        }t          |t                    s
J d
            d S )Nr   Tr   r   r?   z)This test requires more than one process.r   ry   )
dataloaderr%   z:Sampler in BatchSamplerShard is not SeedableRandomSampler.)r   r   r   r@   r   r   r]   r	   r   r!   r   r   )r   r_   r   prepared_data_loadertarget_samplers        r&   -check_seedable_sampler_in_batch_sampler_shardr     s    RLLL$$???F777K$q(((*U(((DrOO4HHHJ.!  
 *7EMN-  D DCD D D D Dr(   c                 8   t          d           |                    d           t          | d          }t          ||||          }t	                      }t
          j                            |                                d          }t          d          D ]}|D ]z}	|
                                  ||	d                   }
t
          j        j                            |
|	d                   }|                                 |                                 {||fS )Nr   r   r=   lrr   r   y)r   manual_seedr   r'   r   rh   optimSGD
parametersr]   	zero_gradnn
functionalmse_lossbackwardstep)r   r    r   r%   r$   r   model	optimizerepochr   r   losss               r&   mock_trainingr     s   RLLL"!b999I+Iy*NbccHE 0 0 2 2s;;Iq   	 	EOOU5:&&F8&//c
CCDMMOOONN	 er(   c                    t                      }t          j                    }d}|dz  |j        z  }t	          |||j        z  ||           \  }}t          |j                  s
J d            t          |j                  s
J d            t                      }t          ||||           }t                      }	t          j                            |	                                d          }
|                    ||	|
          \  }}	}
t          d           |                    d           t#          d          D ]}|D ]{}|	                                  |	|d                   }t          j        j                            ||d	                   }|                    |           |
                                 ||                    |	                                          }	t          j        |j        |	j                  s
J d
            t          j        |j        |	j                  s
J d
            |                    d           t9          d|           }t          |          }t          ||||j        z  |           }t                      }	t          j                            |	                                d          }
|                    ||	|
          \  }}	}
t          d           |                    d           t#          d          D ]}|D ]{}|	                                  |	|d                   }t          j        j                            ||d	                   }|                    |           |
                                 ||                    |	                                          }	t          j        |j        |	j                  s
J d
            t          j        |j        |	j                  s
J d
            |                    d           t          j                                        s+t?                      stA                      stC                      rt7          d           t          j"                     t9          |           }t          d|          }t          ||||           }t                      }	t          j                            |	                                d          }
|                    ||	|
          \  }}	}
t          d           |                    d           t#          d          D ]}|D ]{}|	                                  |	|d                   }t          j        j                            ||d	                   }|                    |           |
                                 ||                    |	                                          }	t          j        |j        |	j                  s
J d
            t          j        |j        |	j                  s
J d
            t          j                                        rt7          d           t          j"                     t          d          }t          j        #                    dd          }	|                    |	          }	|                    |	d          }t          j$        ddg          %                    t          j&        |j'                  } ||          }tQ                      rt7          d           t          j"                     t9          |           }t          d|          }t          ||||           }t                      }	t          j                            |	                                d          }
|                    ||	|
          \  }}	}
t          d           |                    d           t#          d          D ]}|D ]{}|	                                  |	|d                   }t          j        j                            ||d	                   }|                    |           |
                                 ||                    |	                                          }	t          j        |j        |	j                  s
J d
            t          j        |j        |	j                  s
J d
            tS                      rt7          d           t          j"                     t9          |           }t          dd|          }t          ||||           }t                      }	t          j                            |	                                d          }
|                    ||	|
          \  }}	}
t          d           |                    d           t#          d          D ]}|D ]{}|	                                  |	|d                   }t          j        j                            ||d	                   }|                    |           |
                                 ||                    |	                                          }	t          j        |j        |	j                  s
J d
            t          j        |j        |	j                  s
J d
            tU                      rt7          d           t          j"                     t9          |           }t          dd|          }t          ||||           }t                      }	t          j                            |	                                d          }
|                    ||	|
          \  }}	}
t          d           |                    d           t#          d          D ]}|D ]{}|	                                  |	|d                   }t          j        j                            ||d	                   }|                    |           |
                                 ||                    |	                                          }	t          j        |j        |	j                  s
J d             t          j        |j        |	j                  sJ d             d S d S )!Nrt      z0Did not obtain the same model on both processes.r=   r   r   r   r   r   z=Did not obtain the same model on CPU or distributed training.zVTraining yielded the same results on one CPU or distributed setup with no batch split.T)rx   r%   r   zSTraining yielded the same results on one CPU or distributes setup with batch split.zFP16 training check.r   fp16)mixed_precisionr   zKeep fp32 wrapper check.)r   r   )keep_fp32_wrapperr?   )dtyper{   zBF16 training check.bf16zipex BF16 training check.)r   r   r   zxpu BF16 training check.Fz=Did not obtain the same model on XPU or distributed training.)+r
   rh   ro   r@   r   r   abr   r'   r   r   r   r   r   r   r   r]   r   r   r   r   r   r   unwrap_modelr   r   r+   r   ri   is_availabler   r   r   _reset_stateLinearTensortofloat16r{   r   r   r   )r%   r.   r   r    r   r$   	old_modelr_   r   r   r   r   r   r   r   r   model_with_fp32_wrapperinput_tensors                     r&   training_checkr     s8   E!!IJ!^e11F(e>Q1QS\^rssIy	,,``.````	,,``.````--K+Iy*NbccHE 0 0 2 2s;;I!,!4!4Xui!P!PHeYRLLL"1XX   	 	EOOU5:&&F8&//c
CCD  &&&NN	 $$U++//11E>)+uw//pp1pppp>)+uw//pp1ppppnooo/dYmnnn0ABBBK+9j5+>>@T H E 0 0 2 2s;;I!,!4!4Xui!P!PHeYRLLL"1XX   	 	EOOU5:&&F8&//c
CCD  &&&NN	 $$U++//11E>)+uw//pp1pppp>)+uw//pp1ppppklllz   u$4$6$6 u:J:L:L uPaPcPc u$%%%%'''3I]^^^!&L]^^^/	9jRfgg!!KOOE$4$4$6$63O??	%0%8%85)%T%T"%b!!!q 	! 	!A! ! !!!!uSz**x*33FE#JGG$$T***    ! ((//3355~ik5733tt5tttt~ik5733tt5ttttz   7()))%'''!&9991%%##E**"-":":5TX":"Y"Y |QF++..U];K].^^((66  u$%%%%'''3I]^^^!&L]^^^/	9jRfgg!!KOOE$4$4$6$63O??	%0%8%85)%T%T"%b!!!q 	! 	!A! ! !!!!uSz**x*33FE#JGG$$T***    ! ((//3355~ik5733tt5tttt~ik5733tt5tttt  u)***%'''3I]^^^!&dVghhh/	9jRfgg!!KOOE$4$4$6$63O??	%0%8%85)%T%T"%b!!!q 	! 	!A! ! !!!!uSz**x*33FE#JGG$$T***    ! ((//3355~ik5733tt5tttt~ik5733tt5tttt  u()))%'''3I]^^^!&eWhiii/	9jRfgg!!KOOE$4$4$6$63O??	%0%8%85)%T%T"%b!!!q 	! 	!A! ! !!!!uSz**x*33FE#JGG$$T***    ! ((//3355~ik5733tt5tttt~ik5733tt5tttt-u u, 	utr(   c                    t                      }|                     d t          d|j        z            D                       }|                    |d          5 }t          |          dk    s"J d|j         dt          |                       	 d d d            n# 1 swxY w Y   |                     d t          d|j        z  dz
            D                       }|                    |d          5 }|j        r6t          |          dk    s"J d	|j         dt          |                       n5t          |          dk    s"J d
|j         dt          |                       d d d            n# 1 swxY w Y   |                     d t          d|j        z  dz
            D                       }|                    |d          5 }|j        dk    r6t          |          dk    s"J d|j         dt          |                       n5t          |          dk    s"J d|j         dt          |                       d d d            n# 1 swxY w Y   |                                 d S )Nc                 .    g | ]}t          |           S )kdict.0vs     r&   
<listcomp>z8test_split_between_processes_dataset.<locals>.<listcomp>U  s     &Y&Y&YQtayyy&Y&Y&Yr(   r   Fapply_padding4Each process did not have two items. Process index: 
; Length: c                 .    g | ]}t          |           S r   r   r   s     r&   r  z8test_split_between_processes_dataset.<locals>.<listcomp>[       &]&]&]Qtayyy&]&]&]r(   r?   z;Last process did not receive a single item. Process index: zLOne of the intermediate processes did not receive two items. Process index: c                 .    g | ]}t          |           S r   r   r   s     r&   r  z8test_split_between_processes_dataset.<locals>.<listcomp>f  r	  r(   Tz=Single process did not receive a single item. Process index: )	r
   	from_listr]   r@   split_between_processesr#   r,   r\   rG   )datasets_Datasetr.   r   resultss       r&   $test_split_between_processes_datasetr  S  s   E%%&Y&Y%EDW@W:X:X&Y&Y&YZZD		&	&t5	&	A	A pWLLAo%BUooadelamamoo p p p p p p p p p p p p p p p
 %%&]&]%EDW@WZ[@[:\:\&]&]&]^^D		&	&t5	&	A	A LW  	LG!!!zUM`zzlopwlxlxzz "!!! G!!! L^c^q  L  L  ~A  BI  ~J  ~J  L  L "!!L L L L L L L L L L L L L L L %%&]&]%EDW@WZ[@[:\:\&]&]&]^^D		&	&t4	&	@	@ tG!##G!!!|uOb||nqrynznz|| "!!! G!!!seFYssehipeqeqss "!!t t t t t t t t t t t t t t t 
s8   6BB!$B!6A3E55E9<E9A7IIIc                     t                      } t          t          dd| j        z                      }|                     |          5 }t          |          dk    s"J d| j         dt          |                       	 d d d            n# 1 swxY w Y   t          t          dd| j        z  dz
                      }|                     |d          5 }| j        r^t          j	        t          |          | j        z            }t          |          |k    s"J d	| j         dt          |                       d d d            n# 1 swxY w Y   | 
                                 d S )
Nr   r   r  r  r   r?   Tr  z;Last process did not get the extra item(s). Process index: )r
   r   r]   r@   r  r#   r,   r\   r   r   rG   )r.   r   r  num_samples_per_devices       r&   !test_split_between_processes_listr  t  s	   EaU001122D		&	&t	,	, pLLAo%BUooadelamamoo p p p p p p p p p p p p p p p
 a!e11Q67788D		&	&t4	&	@	@ {G  	{%)Ys4yy5;N/N%O%O"G 6666zUM`zzlopwlxlxzz 766{ { { { { { { { { { { { { { { 
s%   	6BBBA&EEEc                     t                      } g d}g d}t          j        g d          }| j        dv rz|||d}t	          |          }|                     |          5 }| j        dk    r%|d         |d         d d| j        z           k    sJ no| j        dk    r|d         |d         d	d          k    sJ nG| j        d
k    r<|d         |d         dd          k    s"J d|d         d          d|d                      | j        dk    r%|d         |d         d d| j        z           k    sJ nO| j        dk    r|d         |d         d	d          k    sJ n'| j        d
k    r|d         |d         dd          k    sJ | j        dk    r^t          j        |d         |d         d d| j        z                     s,J d|d         d d| j        z            d|d                      n| j        dk    rNt          j        |d         |d         d	d                    s$J d|d         d	d           d|d                      nX| j        d
k    rMt          j        |d         |d         dd                    s$J d|d         dd           d|d                      d d d            n# 1 swxY w Y   |                                  d S )N)r?   r   r   r            rt   )r   r   cdera   gh)r?   r   r   )r   r   r  r   r   rt   r   r   r   z
Expected: 
, Actual: r   r  z7Did not obtain expected values on process 0, expected `z`, received: z7Did not obtain expected values on process 2, expected `z7Did not obtain expected values on process 4, expected `)	r
   rh   tensorr@   r   r  r,   r   rG   )r.   r   r   r  r   	data_copyr  s          r&   (test_split_between_processes_nested_dictr     s   E   A000A---..Ai''QQ''TNN	**400 	yG"a''s|y~6PU=P8P6P'QQQQQQ$))s|y~abb'999999$))s|y~bcc'::::<uSVXZI[<u<ugnorgs<u<u:::"a''s|y~6PU=P8P6P'QQQQQQ$))s|y~abb'999999$))s|y~bcc':::::"a''~CL)C.1K18K3K1K"L  O O OTRUYWpXY]b]pXpWpMq  O  O  AH  IL  AM  O  OO O O O $))~CL)C."4  x xwTRUYWXWYWY]wwipqtiuwwx x x x $))~CL)C."5  y yxTRUYWYWZWZ^xxjqrujvxxy y y/	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y6 
s   !H9J&&J*-J*c                  B   t                      } | j        dk    rt          j        g dg dg                              | j                  }|                     |          5 }| j        dk    rDt          j        |t          j        g d                              | j                            sJ nCt          j        |t          j        g d                              | j                            sJ d d d            n# 1 swxY w Y   | 	                                 d S )Nr?   )r   r?   r   r   )r   r  r  r  r   )
r
   r@   rh   r  r   r{   r  r,   r   rG   )r.   r   r  s      r&   #test_split_between_processes_tensorr"    sT   EQ|\\\<<<899<<U\JJ**400 	\G"a''~gu|LLL/I/I/L/LU\/Z/Z[[[[[[~gu|LLL/I/I/L/LU\/Z/Z[[[[[		\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\
 
s   !BD  DDc                  .   t                      } | j        dv rt          t          d                    }t	          |          | j        z  }t	          |          | j        z  }|                     |          5 }| j        |k     r7t	          |          |dz   k    s J d|dz    dt	          |                       n0t	          |          |k    sJ d| dt	          |                       d d d            n# 1 swxY w Y   |                                  d S )N)r?   r   r   rt      r?   z2Each Process should have even elements. Expected: r  )r
   r@   r   r]   r#   r  r,   rG   )r.   r   num_samples_per_process
num_extrasr  s        r&   #test_split_between_processes_evenlyr'    s~   El**E"II"%d))u/B"BYY!44
**400 	zG"Z//LL$;a$????}H_bcHc}}orszo{o{}} @??? LL$;;;;yH_yyknovkwkwyy <;;	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 
s   7A3C66C:=C:c                      t                      } |                                 du sJ | j        r|                                  |                                 du sJ |                                 du sJ d S )NFT)r   check_triggerrB   set_trigger)r_   s    r&   test_triggerr+    s    --K$$&&%//// " "!!! $$&&$.... $$&&%//////r(   c                     dd l } t          j                     t          j                            dd          }t                      }t          j                     |                     t                    5 }|	                    |           d d d            n# 1 swxY w Y   dt          |j        j        d                   v sJ dt          |j        j        d                   v sJ d S )Nr   r?   z*`AcceleratorState` object has no attributez1This happens if `AcceleratorState._reset_state()`)pytestr
   r   rh   r   r   r   raisesAttributeErrorr   strvalueargs)r-  simple_modelr_   cms       r&   test_reinstantiated_stater5    s
   MMM!###8??1a((L--K!###	~	&	& *"L)))* * * * * * * * * * * * * * *73rx}Q?O;P;PPPPP>#bhmTUFVBWBWWWWWWWs   3BBBc                  6   t                      } | j        }|j        dk    rt          d           t	                       |                                 |j        t          j        k    rt          j
                                        }n|j        }||j        k    r|j        dk    rt          d           t                       |j        dk    rt          d           t                       |j        dk    rt          d           t!                       |j        dk    rt          d           t#                       |j        dk    rt          d           t%                       |j        dk    rt          d           t'                      rdd	lm} t-          |           nt          d
           |j        dk    rt          d           t/                       |j        dk    rt          d           t1                       |j        t          j        k    r*t5                       t7                       t9                       |j        dk    rt;                       |j        t          j        k    rd S |j        dk    rt          d           t?          d           t?          d           |j        dk    rt          d           tA                       tC                      r(|j        dk    rt          d           tE                       |#                                 d S )Nr   z**Initialization**z
**Test process execution**z+
**Test split between processes as a list**z+
**Test split between processes as a dict**z-
**Test split between processes as a tensor**z(
**Test split between processes evenly**z7
**Test split between processes as a datasets.Dataset**)r   z6Skipped because Hugging Face datasets is not availablez1
**Test random number generator synchronization**z 
**DataLoader integration test**r?   z
**Training integration test**Fr   Tz
**Breakpoint trigger test**z
**Test reinstantiated state**)$r   r.   r2   r+   rf   rG   rl   r   rm   rh   ri   device_countr@   r,   rd   r  r   r"  r'  r   datasetsr   r  rq   r   XLAr   r   r   r   	DEEPSPEEDr   r+  r   r5  destroy_process_group)r_   r.   num_processes_per_noder  s       r&   mainr=    s(   --KE A%%"###	!:::!&!8!8!:!:!&!4 !444!##0111!!!!##@AAA)+++!##@AAA0222!##BCCC+---!##=>>>+---!##LMMM "" 	L<<<<<<01ABBBBJKKK A%%BCCC A%%1222!444$&&&   Q5777 !::: A%%/000....---- A%%-...NNN $$))3444!###	!!!!!r(   __main__)F)@rR   rP   r   rC   copyr   pathlibr   numpyr   rh   torch.utils.datar   r   
accelerater   accelerate.data_loaderr   r	   accelerate.stater
   accelerate.test_utilsr   r   accelerate.utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r/   r3   r6   r;   rd   rf   rq   r   r   r   r   r   r   r   r  r  r   r"  r'  r+  r5  r=  r   r   r(   r&   <module>rH     sa  "     				                    0 0 0 0 0 0 0 0 " " " " " " M M M M M M M M - - - - - - I I I I I I I I                             $  6LLLLLLL555555_ _ _ _C C CO O OC C CI I IF F FR  / / /$:. :. :.z>6 >6 >6B+L +L +L\t t t4D D D&   $ku ku ku ku\  B  &# # #L	 	 	  $0 0 0"X X X M" M" M"` zDFFFFF r(   