U
    0-e                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZ dd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zedkre  dS )    N)PartialState)assert_exception)DistributedType)DistributedOperationException	broadcastgathergather_objectpad_across_processesreducec                 C   s$   t | jd | j| j  | jS )Ng      ?)torcharangenum_processesprocess_indextodevicestate r   g/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/accelerate/test_utils/scripts/test_ops.pycreate_tensor    s    r   c                 C   s8   t | }t|}| ttd| jd d ks4td S )N      )r   r   tolistlistranger   AssertionError)r   tensorZgathered_tensorr   r   r   test_gather$   s    r   c                 C   sn   | j g}t|}t|| jks<t| dt| d| j |tt| jksjt| dtt| j d S )Nz,  != )r   r   lenr   r   r   r   )r   objZgathered_objr   r   r   test_gather_object*   s    ,r!   c                 C   s6   t ddd | j}| r*tt|}d S )N         )	r   r   viewtr   r   Zis_contiguousr   r   )r   r   _r   r   r   test_gather_non_contigous1   s    r(   c                 C   sL   t | }t|}|jt| jgks(t| tt	d| jd ksHtd S )Nr   )
r   r   shaper   Sizer   r   r   r   r   )r   r   Zbroadcasted_tensorr   r   r   test_broadcast9   s    r+   c                 C   s   | j r t| jd | j}nt| j| j}t|}|jt| jd gksXt	| j s|
 ttd| jdg kst	d S )Nr   r   )Zis_main_processr   r   r   r   r   r	   r)   r*   r   r   r   r   )r   r   Zpadded_tensorr   r   r   test_pad_across_processes@   s    r,   c                 C   sX   | j dkrd S t| }t|d}tddg| j}t||sTt| d| d S )Nr   sumg      @   r   	r   r   r
   r   r   r   r   Zallcloser   r   r   Zreduced_tensorZtruth_tensorr   r   r   test_reduce_sumM   s    

r1   c                 C   sX   | j dkrd S t| }t|d}tddg| j}t||sTt| d| d S )Nr   Zmeang       @r$   r   r/   r0   r   r   r   test_reduce_meanW   s    

r2   c              	   C   s  | j tjkrd S d| _| jdkrDdtdddddgg| ji}n&dtdddddd	ggg| ji}t	t
 t|dd
 W 5 Q R X | jdkrdtdddddgg| ji}n0dtdddddgd	ddddggg| ji}t	t
 t| W 5 Q R X | jdkr4dtdddddgg| ji}n0dtdddddgd	ddddggg| ji}t	t
 t| W 5 Q R X d| _d S )NTr   r   g        r   r   r$   r#      )dimr.         	   F)Zdistributed_typer   NOdebugr   r   r   r   r   r   r   r	   r
   r   )r   datar   r   r   test_op_checkera   s&    
$&

$0
$0
r;   c                 C   s
   t   d S )N)main)indexr   r   r   _mp_fn   s    r>   c                  C   s   t  } | d|   | d t|  | d t|  | d t|  | d t|  | d t|  | d t|  | d t|  | d	 t	|  d S )
NzState: ztesting gatherztesting gather_objectztesting gather non-contigousztesting broadcastztesting pad_across_processesztesting reduce_sumztesting reduce_meanztesting op_checker)
r   printr   r!   r(   r+   r,   r1   r2   r;   r   r   r   r   r<      s$    







r<   __main__)r   Z
accelerater   Zaccelerate.test_utils.testingr   Zaccelerate.utils.dataclassesr   Zaccelerate.utils.operationsr   r   r   r   r	   r
   r   r   r!   r(   r+   r,   r1   r2   r;   r>   r<   __name__r   r   r   r   <module>   s"    


#