o
    )i|                     @   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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dd Zedkrae  dS dS )    N)PartialState)assert_exception)DistributedType)DistributedOperationException	broadcastcopy_tensor_to_devices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   c/home/ubuntu/veenaModal/venv/lib/python3.10/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sJ d S )N      )r   r   tolistlistranger   )r   tensorgathered_tensorr   r   r   test_gather%   s   (r   c                 C   s~   | j tjkrd S | jg}t|}t|| jks&J | dt| d| j |tt| jks=J | dtt| j d S )Nz,  != )	distributed_typer   XLAr   r	   lenr   r   r   )r   objgathered_objr   r   r   test_gather_object+   s   ,2r%   c                 C   sD   | j tjkrd S tjd| jddd }| rJ t	|}d S )N   )r         )
r    r   r!   r   r   r   viewtis_contiguousr   )r   r   _r   r   r   test_gather_non_contiguous5   s
   r-   c                 C   sL   t | }t|}|jt| jgksJ | ttd| jd ks$J d S )Nr   )	r   r   shaper   Sizer   r   r   r   )r   r   broadcasted_tensorr   r   r   test_broadcastA   s   $r1   c                 C   s   | j rt| jd | j}n
t| j| j}t|}|jt| jd gks,J | j s@|	 t
td| jdg ksBJ d S d S )Nr   r   )is_main_processr   r   r   r   r   r
   r.   r/   r   r   r   )r   r   padded_tensorr   r   r   test_pad_across_processesH   s   "r4   c                 C   X   | j dkrd S t| }t|d}tddg| j}t||s*J | d| d S )Nr   sumg      @   r   r   r   r   r   r   r   r   allcloser   r   reduced_tensortruth_tensorr   r   r   test_reduce_sumU      

"r=   c                 C   r5   )Nr   meang       @r(   r   r8   r:   r   r   r   test_reduce_mean_   r>   r@   c                 C   s  | j tjtjfv rd S d| _| jdkr"dtg dg| j	i}ndtg dgg| j	i}t
t t|dd W d    n1 sFw   Y  | jdkr_dtg dg| j	i}ndtg dg dgg| j	i}t
t t| W d    n1 sw   Y  | jdkrdtg dg| j	i}ndtg dg dgg| j	i}t
t t| W d    n1 sw   Y  d| _d S )	NTr   r   )        r   r   r(   r'   )rA   r   r   r(   r'      )dim)rB   r7         	   F)r    r   NOr!   debugr   r   r   r   r   r   r   r
   r   r   )r   datar   r   r   test_op_checkeri   s,   


$


$


rJ   c                 C   sn   | j tjtjfvrd S | jrtjg dtjd| j	}nd }t
|}t|tjg dtj| j	ds5J d S )N)r   r   r(   )dtype)rK   r   )r    r   	MULTI_GPUr!   r2   r   r   intr   r   r   r9   )r   r   r   r   r   test_copy_tensor_to_devices   s   (rN   c                 C   s
   t   d S )N)main)indexr   r   r   _mp_fn   s   
rQ   c                  C   s   t  } | d|   | d t|  | 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-contiguousztesting broadcastztesting pad_across_processesztesting reduce_sumztesting reduce_meanztesting op_checkerz&testing sending tensors across devices)r   printr   r%   r-   r1   r4   r=   r@   rJ   rN   destroy_process_groupr   r   r   r   rO      s*   








rO   __main__)r   
accelerater   accelerate.test_utils.testingr   accelerate.utils.dataclassesr   accelerate.utils.operationsr   r   r   r   r	   r
   r   r   r   r%   r-   r1   r4   r=   r@   rJ   rN   rQ   rO   __name__r   r   r   r   <module>   s(   $


#
