
    g<                         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 Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zedk    r e             dS dS )    N)PartialState)assert_exception)DistributedType)DistributedOperationException	broadcastcopy_tensor_to_devicesgathergather_objectpad_across_processesreducec                     t          j        | j                  dz   | j        | j        z  z                       | j                  S )Ng      ?)torcharangenum_processesprocess_indextodevicestates    b/var/www/html/ai-engine/env/lib/python3.11/site-packages/accelerate/test_utils/scripts/test_ops.pycreate_tensorr   !   s<    L,--3u7JUM`7`aeefkfrsss    c                     t          |           }t          |          }|                                t          t	          d| j        dz  dz                       k    sJ d S )N      )r   r	   tolistlistranger   )r   tensorgathered_tensors      r   test_gatherr!   %   s\    5!!FVnnO!!##tE!U5H!5Ka5O,P,P'Q'QQQQQQQr   c                    | 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_objs      r   test_gather_objectr)   +   s    !444
C %%L| 33335t5tLHYHY5t5t_d_r5t5t3334e&9 : :;;;;;=t=tRVW\]b]pWqWqRrRr=t=t;;;;;r   c                 "   | j         t          j        k    rd S t          j        d                              dd                                                              | j                  }|	                                rJ t          |          }d S )N         )r$   r   r%   r   r   viewtr   r   is_contiguousr	   )r   r   _s      r   test_gather_non_contigousr2   5   sz    !444\"""1a((**,,//==F##%%%%%vAAAr   c                    t          |           }t          |          }|j        t          j        | j        g          k    sJ |                                t          t          d| j        dz                       k    sJ d S )Nr   )	r   r   shaper   Sizer   r   r   r   )r   r   broadcasted_tensors      r   test_broadcastr7   @   s~    5!!F"6**#uz53F2G'H'HHHHH$$&&$uQ8Ka8O/P/P*Q*QQQQQQQr   c                    | j         r5t          j        | j        dz                                 | j                  }n1t          j        | j                                      | j                  }t          |          }|j        t          j        | j        dz   g          k    sJ | j         s>|	                                t          t          d| j                            dgz   k    sJ d S d S )Nr   r   )is_main_processr   r   r   r   r   r   r4   r5   r   r   r   )r   r   padded_tensors      r   test_pad_across_processesr;   G   s      De1A56699%,GGe12255elCC(00M%*e.AA.E-F"G"GGGGG  S##%%eAu7J.K.K)L)LPQs)RRRRRS SRRr   c                    | j         dk    rd S t          |           }t          |d          }t          j        ddg                              | j                  }t          j        ||          sJ | d|             d S )Nr   sumg      @   r#   r   r   r   r   r   r   r   allcloser   r   reduced_tensortruth_tensors       r   test_reduce_sumrD   T   s    a5!!FFE**N<a)),,U\::L>.,77^^N9^9^P\9^9^^^^^^r   c                    | j         dk    rd S t          |           }t          |d          }t          j        ddg                              | j                  }t          j        ||          sJ | d|             d S )Nr   meang       @r-   r#   r?   rA   s       r   test_reduce_meanrG   ^   s    a5!!FFF++N<a)),,U\::L>.,77^^N9^9^P\9^9^^^^^^r   c                 p   | j         t          j        t          j        fv rd S d| _        | j        dk    r2dt          j        g dg                              | j	                  i}n2dt          j        g dgg                              | j	                  i}t          t                    5  t          |d           d d d            n# 1 swxY w Y   | j        dk    r2dt          j        g dg                              | j	                  i}n5dt          j        g dg dgg                              | j	                  i}t          t                    5  t          |           d d d            n# 1 swxY w Y   | j        dk    r2dt          j        g dg                              | j	                  i}n5dt          j        g dg dgg                              | j	                  i}t          t                    5  t          |           d d d            n# 1 swxY w Y   d| _        d S )	NTr   r   )        r   r   r-   r,   )rI   r   r   r-   r,      )dim)rJ   r>         	   F)r$   r   NOr%   debugr   r   r   r   r   r   r   r   r   r   )r   datas     r   test_op_checkerrR   h   s   /"4o6I!JJJEKa%,(9(9(9':;;>>u|LLM%,)=)=)=(>'?@@CCELQQR	7	8	8 * *Tq))))* * * * * * * * * * * * * * * a%,(9(9(9':;;>>u|LLM%,):):):OOO(L'MNNQQRWR^__`	7	8	8  t               a%,(9(9(9':;;>>u|LLM%,):):):OOO(L'MNNQQRWR^__`	7	8	8  $               EKKKs6   ,C

CCE77E;>E;H$$H(+H(c                 h   | j         t          j        t          j        fvrd S | j        r;t          j        g dt
          j                                      | j	                  }nd }t          |          }t          j        |t          j        g dt
          j        | j	                            sJ d S )N)r   r   r-   )dtype)rT   r   )r$   r   	MULTI_GPUr%   r9   r   r   intr   r   r   r@   )r   r   s     r   test_copy_tensor_to_devicesrW      s    o&?AT%UUU iiiuy999<<U\JJ#F++F>&%,yyy	RWR^"_"_"_```````r   c                 "    t                       d S )N)main)indexs    r   _mp_fnr[      s    FFFFFr   c                     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-contigousztesting broadcastztesting pad_across_processesztesting reduce_sumztesting reduce_meanztesting op_checkerz&testing sending tensors across devices)r   printr!   r)   r2   r7   r;   rD   rG   rR   rW   destroy_process_groupr   s    r   rY   rY      sg   NNE	KK!%!!"""	KK !!!	KK'(((u	KK.///e$$$	KK#$$$5	KK.///e$$$	KK$%%%E	KK%&&&U	KK$%%%E	KK8999&&&	!!!!!r   __main__)r   
accelerater   accelerate.test_utils.testingr   accelerate.utils.dataclassesr   accelerate.utils.operationsr   r   r   r	   r
   r   r   r   r!   r)   r2   r7   r;   rD   rG   rR   rW   r[   rY   __name__ r   r   <module>rf      s  "  # # # # # # : : : : : : 8 8 8 8 8 8                 t t tR R Ru u u  R R R
S 
S 
S_ _ __ _ _     Fa a a  
" " "0 zDFFFFF r   