
    biy                         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        yy)    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	                  | j
                        S )Ng      ?)torcharangenum_processesprocess_indextodevicestates    a/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/accelerate/test_utils/scripts/test_ops.pycreate_tensorr   !   sD    LL,,-3u7J7JUM`M`7`aeefkfrfrss    c                     t        |       }t        |      }|j                         t        t	        d| j
                  dz  dz               k(  sJ y )N      )r   r	   tolistlistranger   )r   tensorgathered_tensors      r   test_gatherr!   %   sH    5!FVnO!!#tE!U5H5H!5Ka5O,P'QQQQr   c                 v   | j                   t        j                  k(  ry | j                  g}t	        |      }t        |      | j                  k(  s"J | dt        |       d| j                          |t        t        | j                              k(  s(J | dt        t        | j                                      y )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t~RLHYGZZ^_d_r_r^s5tt34e&9&9 :;;t~TRVW\]b]p]pWqRrQs=tt;r   c                     | j                   t        j                  k(  ry t        j                  d| j
                        j                  dd      j                         }|j                         rJ t        |      }y )N   )r         )
r$   r   r%   r   r   r   viewtis_contiguousr	   )r   r   _s      r   test_gather_non_contigousr2   5   s`    !4!44 \\"U\\2771=??AF##%%%vAr   c                     t        |       }t        |      }|j                  t        j                  | j
                  g      k(  sJ |j                         t        t        d| j
                  dz               k(  sJ y )Nr   )	r   r   shaper   Sizer   r   r   r   )r   r   broadcasted_tensors      r   test_broadcastr7   A   sk    5!F"6*##uzz53F3F2G'HHHH$$&$uQ8K8Ka8O/P*QQQQr   c                    | j                   r<t        j                  | j                  dz         j	                  | j
                        }n8t        j                  | j                        j	                  | j
                        }t        |      }|j                  t        j                  | j                  dz   g      k(  sJ | j                   s7|j                         t        t        d| j                              dgz   k(  sJ y y )Nr   r   )is_main_processr   r   r   r   r   r   r4   r5   r   r   r   )r   r   padded_tensors      r   test_pad_across_processesr;   H   s     e11A5699%,,Ge11255ellC(0M%**e.A.AA.E-F"GGGG  ##%eAu7J7J.K)LPQs)RRRR !r   c                     | j                   dk7  ry t        |       }t        |d      }t        j                  ddg      j                  | j                        }t        j                  ||      sJ | d|        y )Nr   sumg      @   r#   r   r   r   r   r   r   r   allcloser   r   reduced_tensortruth_tensors       r   test_reduce_sumrD   U   sp    a5!FFE*N<<a),,U\\:L>>.,7^N;K4P\~9^^7r   c                     | j                   dk7  ry t        |       }t        |d      }t        j                  ddg      j                  | j                        }t        j                  ||      sJ | d|        y )Nr   meang       @r-   r#   r?   rA   s       r   test_reduce_meanrG   _   sp    a5!FFF+N<<a),,U\\:L>>.,7^N;K4P\~9^^7r   c                 ~   | j                   t        j                  t        j                  fv ry d| _        | j
                  dk(  r4dt        j                  g dg      j                  | j                        i}n4dt        j                  g dgg      j                  | j                        i}t        t              5  t        |d       d d d        | j
                  dk(  r4dt        j                  g dg      j                  | j                        i}n7dt        j                  g dg dgg      j                  | j                        i}t        t              5  t        |       d d d        | j
                  dk(  r4dt        j                  g dg      j                  | j                        i}n7dt        j                  g dg dgg      j                  | j                        i}t        t              5  t        |       d d d        d| _        y # 1 sw Y   LxY w# 1 sw Y   xY w# 1 sw Y   d| _        y xY w)	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   i   s   /"4"4o6I6I!JJEKa%,,(9':;>>u||LM%,,)=(>'?@CCELLQR	7	8 *Tq)* a%,,(9':;>>u||LM%,,):O(L'MNQQRWR^R^_`	7	8 t a%,,(9':;>>u||LM%,,):O(L'MNQQRWR^R^_`	7	8 $ EK+* *  EKs$   ;HH 7H,H H),H<c                    | j                   t        j                  t        j                  fvry | j                  rAt        j                  g dt
        j                        j                  | j                        }nd }t        |      }t        j                  |t        j                  g dt
        j                  | j                              sJ y )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&?&?ATAT%UUiuyy9<<U\\J#F+F>>&%,,y		RWR^R^"_```r   c                     t                y )N)main)indexs    r   _mp_fnr[      s    Fr   c                  X   t               } | j                  d|         | j                  d       t        |        | j                  d       t        |        | j                  d       t	        |        | j                  d       t        |        | j                  d       t        |        | j                  d       t        |        | j                  d       t        |        | j                  d	       t        |        | j                  d
       t        |        | j                          y )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      s    NE	KK'%!"	KK !	KK'(u	KK./e$	KK#$5	KK./e$	KK$%E	KK%&U	KK$%E	KK8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  tRu	R
S__ Fa
"0 zF r   