
    nin                     ^    S SK rS SKJr  S rS rS rS rS rS r	S r
S	 rS
 rS rS rS rg)    N)MPIc                  >    [         R                  R                  5       $ N)r   
COMM_WORLDGet_size     Q/home/james-whalen/.local/lib/python3.13/site-packages/pybullet_utils/mpi_util.pyget_num_procsr          		 	 	""r	   c                  >    [         R                  R                  5       $ r   )r   r   Get_rankr   r	   r
   get_proc_rankr      r   r	   c                  (    [        5       n U [        :H  $ r   )r   ROOT_PROC_RANK)ranks    r
   is_root_procr      s    	$		r	   c                 H    [         R                  R                  U [        S9  g )N)root)r   r   Bcastr   xs    r
   bcastr      s    ..q~.r	   c                 6    [        U [        R                  5      $ r   )
reduce_allr   SUMr   s    r
   
reduce_sumr          	Asww	r	   c                 6    [        U [        R                  5      $ r   )r   r   PRODr   s    r
   reduce_prodr!      s    	Asxx	  r	   c                 6    [        U 5      nU[        5       -  nU$ r   )r   r   )r   buffers     r
   
reduce_avgr$   !   s    a=&MO&	-r	   c                 6    [        U [        R                  5      $ r   )r   r   MINr   s    r
   
reduce_minr'   '   r   r	   c                 6    [        U [        R                  5      $ r   )r   r   MAXr   s    r
   
reduce_maxr*   +   r   r	   c                    [        U [        R                  5      nU(       a  U O[        R                  " U /5      n[        R                  " U5      n[
        R                  R                  X4US9  U(       a  UnU$ US   nU$ )N)opr   )
isinstancenpndarrayarray
zeros_liker   r   	Allreduce)r   r,   is_arrayx_bufr#   s        r
   r   r   /   sf    2::&(!RXXqc]%==&..5R06&	- $*!9&	-r	   c                 $   [        U [        R                  5      n[        R                  " U /5      n[        R                  " U5      n[        R
                  " U[        5       SS9n[        R                  R                  X#5        [        U5      nU$ )Nr   )axis)r-   r.   r/   r0   r1   repeatr   r   r   	Allgatherlist)r   r3   r4   r#   s       r
   
gather_allr:   8   sc    2::&(
((A3-%==&99V]_15&..5)<&	-r	   )numpyr.   mpi4pyr   r   r   r   r   r   r   r!   r$   r'   r*   r   r:   r   r	   r
   <module>r=      sG     ## 
	
 !  r	   