
    `i*                     (   d dl Z d dl mZ d dlmZ d dlZd dlmc mZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ ded         deedf         dededed         f
dZdeded         deedf         dededeee
         eee
f         f         fdZded         deedf         ddfdZded         deedf         ddfdZded         deedf         ddfdZded         deedf         de fdZ!dedefdZ"dS )    N)Sequence)chain)ndarray)Device)Stream)get_current_stream)_array)_chunk)_data_transfer)_index_arith)_modesargsz_array.DistributedArraykwargsdevchunk_ireturnz_data_transfer._PartialUpdatec                 ~   g }d}t          | |                                          D ]$}|j        |         |         j        }|r|rd} n|}%|r|S t          | |                                          D ]J}t          j        |j                                                  D ]}|                    |j                   Kg S NTF)r   values_chunks_mapupdatesfrom_iterableflush_mode)	r   r   r   r   r   at_most_one_updateargupdates_nowchunks	            x/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/cupyx/distributed/array/_elementwise.py_find_updatesr       s     46GT6==??++ " "oc*73; 	" %*"!G T6==??++ # #()?)?)A)ABB 	# 	#EKK	""""	#I    streamc                 |      fdfd|D             }fd|                                 D             }||fS )Nc                 l    | j                           }                    |j                   |j        S N)r   
wait_eventreadyarray)d_arrayr   r   r   r"   s     r   access_arrayz+_prepare_chunks_array.<locals>.access_array7   s3    #C(1%+&&&{r!   c                 &    g | ]} |          S  r,   ).0r   r*   s     r   
<listcomp>z)_prepare_chunks_array.<locals>.<listcomp><   s#    444,,s##444r!   c                 .    i | ]\  }}| |          S r,   r,   )r-   keyr   r*   s      r   
<dictcomp>z)_prepare_chunks_array.<locals>.<dictcomp>=   s)    JJJxsCCc**JJJr!   )items)r"   r   r   r   r   
arg_arrayskwarg_arraysr*   s   `  ``  @r   _prepare_chunks_arrayr5   1   sp          
 5444t444JJJJJ6<<>>JJJL|##r!   c                     d | D             | d d <   |                     d |                                D                        d S )Nc                 L    g | ]!}|                     t          j                  "S r,   _to_op_moder   REPLICA)r-   r   s     r   r.   z/_change_all_to_replica_mode.<locals>.<listcomp>E   s&    ???3sv~..???r!   c              3   ^   K   | ](\  }}||                     t          j                  fV  )d S r%   r8   )r-   kr   s      r   	<genexpr>z._change_all_to_replica_mode.<locals>.<genexpr>F   sJ        17CCOOFN++,     r!   )updater2   )r   r   s     r   _change_all_to_replica_moder?   B   sd     @?$???DG
MM  ;A<<>>       r!   c           
         t          |          }t          ||           d }i }|p|                                D ]	}|j        } |                                D ]e\  }}g ||<   t          |          5  t                      }	t          |          D ]\  }
}t          ||||
          }t          |	||||
          \  }}d }t          ||                                          D ]K}t          |t          j                  r/|J t          j                            |j        |j        |          }L|; | |i |}|j        }t          j        ||	                                |||f          }||                             |           |sd gt+          |          z  }i }|D ]\  }}t          |          D ]5\  }}t          |t          j                  r|j        ||<   *||         ||<   6|                                D ]5\  }}t          |t          j                  r|j        ||<   *||         ||<   6|	                    |j                    | |i |}|j        }|	                                }t3          j        ||||f          }|                    ||           	 d d d            n# 1 swxY w Y   gt          j        |                                          D ]7}t          |j        t:          t          j        f          st=          d          8d x}}|p|                                D ]}|j        }|j        } |J tA          j!        |||tD          j#        |          S )N
prevent_gc;Kernels returning other than single array are not supported)$listr?   r   	index_mapr2   r   r   	enumerater    r5   r   
isinstancer
   _ArrayPlaceholder_Chunkcreate_placeholdershapedevicedtyperecordappendlenr(   r&   r'   r   
_AsyncData
add_updater   r   RuntimeError_commsr	   DistributedArrayr   r:   )kernelr   r   	out_dtypeout_chunks_mapr   rE   r   idxsr"   r   idxr   r3   r4   	out_chunkdata	out_array
arg_sliceskwarg_slicesr>   ir<   out_update_arrayr'   
out_updater   rK   commss                                r   _execute_kernelrd   K   s:   
 ::D  f---I57N'  M	__&& <: <:	T sC[[ :	: :	:'))F )$ 7: 7: (fc7CC+@D&#w,8 ,8(
L !	!*l.A.A.C.CDD : :D!$(@AA :  )000$*M$D$D JS%: %:	 $ &
 Cl C CI )I &!6==??C$.#=!? !? !?I s#**9555 "Vc*oo5
!#* : :KFC#,Z#8#8 6 64%dF,DEE 6,2LJqMM,0IJqMM#/#5#5#7#7 8 84%dF,DEE 8.4lLOO.23iLOO%%fl333'-vz'J\'J'J$ 0 6I"MMOOE!/!:(%$.#="? "? "?J ((S9999):G7::	: :	: :	: :	: :	: :	: :	: :	: :	: :	: :	: :	: :	: :	: :	:x $^%:%:%<%<== O O%+1I'JKK 	OMO O O	O EE'  	
"y.&.%A A As   2H3J22J6	9J6	c           
      T	   t          |          dk    sJ t          |          dk    rt          d          |rt          d          t          |          }t          |          D ]z\  }}|                    t
          j                  ||<   t          j        ||         j	        
                                          D ]!}|                    t
          j                   "{|\  }}t          | t          j        j        j                  r`| j                            |j        |j        f          }|0t          d| j         d|j        j        |j        j        f           |j        }	nVt          | t          j        j        j                  sJ |                     |j        j        |j        j        fd          \  }
}	}
t          |	          dk    rt3          |	           t          d	          |	d
         }|j        }|j        }i }t          j        |j	        
                                          D ]Q}|j        j        j        }|                                5 }tA          j!        |j        j        |          }t          j        |j	        
                                          D ]h}tE          j#        |j$        |j$        |          }|&|j        j        j        }t          j%        j&        '                    ||          dk    r(tQ          j)        |||j$        |j        |j                  }n*t          j        j        *                    |j        |           |+                    |j,                   tE          j-        |j$        ||          }tE          j-        |j$        ||          }| j.        dk    sJ  | t_          j0        tb          |j                  |         t_          j0        tb          |j                  |         ||                    jte          j3        ||4                                |j$        |j	                  }|5                    |g           6                    |           ddd           n# 1 swxY w Y   StQ          j7        |||t
          j        |          S )z&Arguments must be in the replica mode.   zsElement-wise operation over more than two distributed arrays is not supported unless they share the same index_map.zLKeyword argument is not supported unless arguments share the same index_map.Nz#Could not guess the return type of z with arguments of type r,      rC   r   rA   )8rP   rS   rD   rF   r9   r   r:   r   r   r   r   r   rG   cupy_core_kernelufunc_ops_guess_routine_from_in_typesrM   nametype	out_typesElementwiseKernel_decide_params_typeprintrK   rT   r(   rL   idon_ready_creation_basicemptyr   _index_intersectionindexcudaruntimedeviceCanAccessPeerr	   _make_chunk_async_check_peer_accessr&   r'   _index_for_subindexnintypingcastr   r
   rI   rN   
setdefaultrO   rU   )rV   r   r   r`   r   r   aboprp   _rM   rK   rc   rX   a_chunka_devr"   r]   b_chunkintersectionb_dev	a_new_idx	b_new_idxr[   s                            r   _execute_peer_accessr      s    t99>>>>
4yy1}}FG G 	G  ;:; ; 	; ::DD// ( (3//&.11Q(a)<)C)C)E)EFF 	( 	(EKK''''	( DAq &$*,233 
.[55qw6HII:Jfk J J,-GL!',+GJ JK K K L		&$*"4"FGGGGG 44W\17<(". .9a 9~~iIK K 	KaLEGEHE57N&q}';';'='=>> #C #C$' !	C6'-gm.A5III .q}/C/C/E/EFF - -+?M7=% 9  9',/9$88FF!KK$6ugmW]AHN NGG J&99'-OOO!!'-000(<M<8 8	(<M<8 8	 zQv{7GM::9E{7GM::9E +- - - - 6==??GM=* * *I %%eR0077	BBBC!	C !	C !	C !	C !	C !	C !	C !	C !	C !	C !	C !	C !	C !	C !	CF "unfne= = =s   HQ;;Q?	Q?	c                     d }t          | |                                          D ]}||j        }|j        |k    r dS dS r   )r   r   rE   )r   r   rE   r   s       r   _is_peer_access_neededr     sY     IT6==??++  II]i''44 ( 5r!   c                    t          ||                                          D ]+}t          |t          j                  st          d          ,t          ||          }|rt          | ||          S t          | ||          S )NzFMixing a distributed array with a non-distributed one is not supported)	r   r   rG   r	   rU   rS   r   r   rd   )rV   r   r   r   needs_peer_accesss        r   _executer     s    T6==??++ " "#v677 	"!" " "	" /tV<< 5#FD&999vtV444r!   )#r   r   	itertoolsr   rh   cupy._creation.basic	_creationbasicrv   cupy._core.corer   cupy.cuda.devicer   cupy.cuda.streamr   r   cupyx.distributed.arrayr	   r
   r   r   r   dictstrintrD   r    tupler5   r?   rd   r   boolr   r   r,   r!   r   <module>r      s                 . . . . . . . . . # # # # # # # # # # # # # # # # # # / / / / / / * * * * * * * * * * * * 2 2 2 2 2 2 0 0 0 0 0 0 * * * * * *
,
-//0 
  

)*	   <$$
,
-$ //0$ 
	$ 	$
 4=$sG|,,-$ $ $ $",-S3349=   ^A
,
-^A //0^A 	^A ^A ^A ^ABU=
,
-U= //0U= 	U= U= U= U=p
,
-//0 
   55 5$ 5 5 5 5 5 5r!   